linux上docker部署springboot项目
1.搭建docker环境
需要linux系统必须是centOS7以上
执行一下命令:
yum install epel-release –y
yum clean all
yum list
2.安装
yum install docker-io –y
systemctl start docker
3.测试docker是否成功
docker info
出现一下信息证明成功:
········
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
127.0.0.0/8
Registries: docker.io (secure)
4、拉取Java8镜像
docker pull java:8
5.创建Dockerfile文件内容如下:
FROM java:8
MAINTAINER 70kg 449246146@qq.com
VOLUME /tmp
ADD mystory-1.0.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
介绍一下:
FROM :表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
MAINTAINER :指定维护者的信息
VOLUME :VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
ADD :拷贝文件并且重命名(前面是上传jar包的名字,后面是重命名)
RUN :每条run指令在当前基础镜像执行,并且提交新镜像
ENTRYPOINT :为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
6.将创建好的Dockerfile文件和jar包上传到服务器,放在同一文件夹下,进入jar包所在文件夹,执行命令
注意:后面末尾有一个空格和一个“.”,mystory是创建的镜像的名字,“.”表示当前目录
docker build -t mystory .
7.查看生成的镜像:
docker images
8.创建容器并运行jar包
docker run -d -p 8080:8080 mystory
-d表示在后台运行
-p 指定端口号 第一个8080为容器内部的端口号,第二个8080为外界访问的端口号,将容器内的8080端口号映射到外部的8080端口号
如果想用域名来访问的话,需要把数据库连接改为服务器的ip+数据库端口号,并且命令改为:docker run -d -p 80:80 mystory
9.测试
外网ip+端口号访问项目
10.查看docker日志
docker logs 容器id
实时查看docker日志
docker logs -f -t --tail=100 容器id
查看指定时间后日志,只显示最后100行
docker logs -f -t --since="2020-10-01" --tail=100 容器id
查看指定时间区段的日志
docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" 容器id
查看指定时间后面的日志
docker logs -t --since="2020-10-01T19:00:00" 容器id
查看最近5分钟的日志
docker logs --since 5m 容器id
进入docker容器
docker exec -it 容器id /bin/bash
删除所有none镜像
docker image prune
11、更新包
按照上述方式构建镜像启动容器,那么当项目更新时,需要在进行这个流程,就显得比较繁琐,根据参考第二条链接的脚本部署并亲测有效,流程如下:
(1)创建启动脚本hello.sh
java -jar /data/hello-0.0.1-SNAPSHOT.jar
将hello.sh上传到/home/hello,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到(这个路径是宿主机的路径),/data/xx这是容器内的路径,由容器管理,后面需要把宿主机的路径挂载到容器内。
(2)赋权
chmod +x hello.sh
(3)创建Dockerfile
# Docker image for springboot file run
# VERSION 0.0.1
# Author: toutou
# 基础镜像使用java
FROM java:8
EXPOSE 8501
CMD ["sh","-c","/data/hello.sh"]
CMD [“sh”,“-c”,“/data/hello.sh”] 表示在容器启动时启动(1)中创建的hello.sh脚本。
ENTRYPOINT和CMD区别可以参考:
https://www.jianshu.com/p/0f52eda5ab88
(4)上传jar包
将jar包放入hello.sh的同一个文件夹目录,即/home/hello,创建容器时再将该目录(宿主机目录)与容器的/data目录进行映射。。
(5)创建镜像
docker build -t hello .
hello是镜像名,末尾的点号代表当前目录,所以生成镜像的命令需要在Dockerfile所在的目录执行。
(6)创建&启动容器
docker run --name hello -it -v /home/hello:/data -d -p 8501:8501 hello
docker start hello
将宿主机的/home/hello目录与容器的/data目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。即使jar包名字发生变化,也需要再更新一下hello.sh脚本。
更新之后重启容器
详情可以参考:
1、https://www.cnblogs.com/zhangjianbing/p/9156366.html
2、http://www.ay1.cc/article/25210.html