docker容器部署Spring Boot项目及更新
Docker这项容器技术已经是十分的火热了,读者要是不了解docker的话可以吧docker先理解为虚拟机。
我们的Springboot最终是要部署在Linux上的,docker作为Linux轻量级的实现。docker也是可以用来部署Springboot应用的。
1.创建Dockerfile
创建一个文件名为Dockerfile的文件,复制以下内容到文件中
- FROM java:8
- VOLUME /tmp
- ADD config-server-0.0.1-SNAPSHOT.jar app.jar
- RUN sh -c 'touch /app.jar'
- ENV JAVA_OPTS=""
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
其中config-server-0.0.1-SNAPSHOT.jar这个是我的springClould的一个配置中心微服务
2.创建docker镜像
将创建好的Dockerfile文件和jar包上传到服务器,放在同一文件夹下,进入jar包所在文件夹,执行命令
- docker build -t xstz_config_server .
xstz_config_server为生成的镜像名, .表示当前目录
- docker build -t xstz_config_server .
- Sending build context to Docker daemon 26.84 MB
- Step 1 : FROM java:8
- Trying to pull repository docker.io/library/java ...
- 8: Pulling from docker.io/library/java
- 5040bd298390: Pull complet
- fce5728aad85: Pull complete
- 76610ec20bf5: Pull complete
- 60170fec2151: Pull complete
- e98f73de8f0d: Pull complete
- 11f7af24ed9c: Pull complete
- 49e2d6393f32: Pull complete
- bb9cdec9c7f3: Pull complete
- Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
- ---> d23bdf5b1b1b
- Step 2 : VOLUME /tmp
- ---> Running in 2c1948cd1181
- ---> 33092a5791af
- Removing intermediate container 2c1948cd1181
- Step 3 : ADD config-server-0.0.1-SNAPSHOT.jar app.jar
- ---> b2c41134d3f
- Removing intermediate container 684002e93194
- Step 4 : RUN sh -c 'touch /app.jar'
- ---> Running in 985f0fece3fd
- ---> b63eb40e4e50
- Removing intermediate container 985f0fece3fd
- Step 5 : ENV JAVA_OPTS ""
- --> Running in 327eb48ba1d6
- ---> d3c19e35c369
- Removing intermediate container 327eb48ba1d6
- Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
- ---> Running in eb0d88164ae7
- ---> 1ed548a8d199
- Removing intermediate container eb0d88164ae7
- Successfully built 1ed548a8d199
3.查看生成的镜像
- docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- xstz_config_server latest 1ed548a8d199 6 seconds ago 696.8 MB
- docker.io/nginx latest 8b89e48b5f15 5 days ago 109 MB
- docker.io/registry latest b2b03e9146e1 2 weeks ago 33.29
docker.io/java 8 d23bdf5b1b1b 18 months ago 643.1 MB
4.创建容器并运行jar包
- [root@oracle xstz_springclould]# docker run -d -p 8091:8091 xstz_config_server
- e67579cb6f5bc60a11ca1441ba1ae220c9fdf2d772d1ff3d22d713614673c75e
- [root@oracle xstz_springclould]#
增加时区,并给容器起名字,防止docker容器时间和宿主机不一致
- docker run --name eureka -d -p 8761:8761 -e TZ="Asia/Shanghai" eureka:v1
-d表示在后台运行
-p 指定端口号 第一个8080 为 容器内部的端口号 第二个8080位外界访问的端口号,将容器内的8080端口号映射到外部的8080端口号
5.然后就可以通过外网ip+端口号访问项目
6.测试一下,从spring clould config 客户端启动项目,从config-server端读取配置文件,看是否可以成功
启动我本地的Config客户端,发下可以成功启动,成功从服务端读取配置文件
配置文件如下
二、服务更新
1.查看容器上存放的jar包路径
Dofile为例如下
- FROM java:8
- VOLUME /tmp
- ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar
- RUN sh -c 'touch /eureka.jar'
- ENV JAVA_OPTS=""
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]
查看命令
- find / -name eureka.jar
结果
- /var/lib/docker/overlay2/0ad9b91289cca6d0cc4961476ecadc4f96761af3c202c270ad60de7aee1ecf4f/diff/eureka.jar
- /var/lib/docker/overlay2/3759b25ac40ef0c8df4e0f87ec245417fdb3efdcaf17569e5a866de6bf6882a0/diff/eureka.jar
- /var/lib/docker/overlay2/959a2175dc14231ae29aa231626b6aae566063e9d3f577e299fc261d511908aa/merged/eureka.jar
2. 把需要更新的新jar包替换上面查询出来的所有jar。
3. 重启docker容器。
实时查看docker容器名为eureka的最后10行日志
- docker logs -f -t --tail 10 eureka
优化更新
用了一段时间上面的更新方法,发现每次替换jar,都要替换3个地方,有点繁琐,而且前缀不固定,没法通过自动化脚本更新,于是又研究了另外一个智能的办法
dockerfile如下
- FROM java:8
- VOLUME /tmp
- ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar
- RUN sh -c 'touch /eureka.jar'
- ENV JAVA_OPTS=""
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]
构建命令
- docker build -t eureka:v1 .
运行命令
- docker run --name=eureka -d -p 8761:8761 -v /home/docker/springclould/eureka/eureka_server-0.0.1-SNAPSHOT.jar:/eureka.jar -e tZ="Asia/Shanghai" eureka:v1
将容器中的jar映射到宿主机目录中,每次只需要替换宿主机中的jar包即可
然后停止服务
- docker stop eureka
再启动服务
- docker start eureka
即可更新服务
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐