经过前两节的项目部署和总结,需要对现有的项目部署步骤和方案,进行一个改进。
改进思路:
1、由之前的一个镜像里面只能创建一个容器,只能运行一个项目--->修改为一个镜像里面可以创建多个容器,每个容器运行不同的项目(对应不同的端口)。
2、容器运行的项目由原来的war包改为jar包
3、(单台机器)做到镜像、容器已经创建不需要删除,就能实现项目的迭代更新部署
4、(单台机器)实现jenkins自动化构建部署
第1条,如果只创建一个镜像,那么这个镜像就要求必须是基础环境的镜像,不能包含任何项目有关的个性化信息,对应的DockerFile文件内容如下:
===================================================
#使用的基础镜像
FROM daocloud.io/centos:latest
#作者信息
MAINTAINER WANGWENQIAN "wenqianwang@creditharmony.cn"
#创建持续化存储
VOLUME /tmp
#创建目录(在镜像上创建)
RUN mkdir -p /data/jdk
#把当前目录下的jdk文件夹添加到镜像
ADD jdk /data/jdk
#添加环境变量
ENV JAVA_HOME /data/jdk
ENV PATH /data/jdk/bin:$PATH
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
#执行java命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/data/app.jar"]
===================================================
通过dockerfile只构建一个镜像(只包含项目运行所需要的环境)
各个项目之间的差异性,都体现在创建容器的命令上面(启动容器的时候,通过"- v"指定项目挂载,分配不同的端口号。达到一个镜像,多个容器(不同端口,不同项目)的效果),如下两条创建容器的命令:
容器1:8863端口的question-view项目
docker run -d -v /data/projects/telrobot-question-view/8863/telrobot-question-view-0.0.1-SNAPSHOT.jar:/data/app.jar -p 8863:8863 --name telrobot-question-view-c-8863 telrobot-question-view-i
容器2:8864端口的question-view项目
docker run -d -v /data/projects/telrobot-question-view/8864/telrobot-question-view-0.0.1-SNAPSHOT.jar:/data/app.jar -p 8864:8864 --name telrobot-question-view-c-8864 telrobot-question-view-i
关注点1:docker run 命令中的 -v的命令(实现磁盘挂载,此处直接挂载指定的jar包,且需要重命名为app.jar [[原因是Dockerfile的最后的ENTRYPOINT 命令是要求可执行的jar包名字为app.jar ,即"java -jar app.jar"]]),两个命令虽然都是app.jar但是因为处在不同的容器中,所以不会冲突覆盖。
关注点2:docker run 命令中的 -p的命令,为不同的容器映射出不同的端口。
第2条,之前文章介绍的项目是war包项目部署,需要依赖tomcat,但是spring cloud是jar包发布,且jar中自带中间件,所以不需要再构建镜像的时候,多搭建一个tomcat的容器配置。 镜像更简洁,干净了。
第3条,之前文章介绍的项目更新部署项目包的时候,都需要删除容器、镜像,然后重新创建镜像、容器,重新挂载项目并启动,才能达到更新项目的目的。 而现在,我们通过执行docker run 的命令的时候,就已经指定挂载的项目jar包,所以只需要stop容器-->项目新jar上传到指定路径-->start容器即可实现项目更新部署。
关注点1:docker stop后,然后再docker start 启动容器的时候,可以自动更新挂载路径下的jar包,这样就能保证重启后的docker容器加载的是最新的jar项目包。
第4点,请参照《Docker结合Jenkins实现自动化构建部署(二)》的文章。jenkins的配置和搭建整体思路不变。
相关系列连接:
Docker结合Jenkins实现自动化构建部署(一)
Docker结合Jenkins实现自动化构建部署(二)
docker+jenkins构建maven的springcloud项目-错误处理
Docker+Spring cloud访问报错Whitelabel Error Page