前言
- 大家好,很抱歉今天才更新,昨天工作有点忙。忙到很晚才得空,今天就把欠大家的先补上。
- 今天我们来说说,上一篇文章我们遗留下来的一些问题。
- 如何将我们自己的项目部署到镜像当中?
- 如何构建自己的镜像?
- 如何使用github实现自动构建镜像?
- 如何上传下载自己的镜像?
- 接下来我们一条一条的说,大家安心往下看。
- 没有看上一篇文章的同学,可以先上跳还在手动搭建各种环境?docker容器教你一步到位
docker中如何部署自己的项目?
-
上一篇文章中我们介绍了如何拉取tomcat以及java相关镜像、启动容器。而且我们也成功的访问到了tomcat的首页。那我们该如何将自己的war或者是jar包部署到我们的docker容器中以达到项目部署的目的呢?
-
那我们首先来说一下如何在docker镜像中部署war包。
-
首先我们需要docker的环境。
-
其次我们需要一个可部署的war包。
-
我们创建一个文件夹,将war包copy进去。
-
然后通过vim编辑器创建一个Dockerfile
# 首先进入我们的目录 $ cd 我们创建的文件夹 # 创建Dockerfile文件 $ vim Dockerfile
-
Dockerfile
# 在Dockerfile中放入如下命令 # 指定基础镜像 from hub.c.163.com/library/tomcat # 这段可有可无 MAINTAINER Leiyuan 15326047083@163.com # 使用copy或者add命令将 test.war 也就是我们的war包添加到容器中的对应tomcat的webapps目录中 COPY test.war /usr/local/tomcat/webapps
-
如上文件中将war包添加到了webapps中,那当我们启动容器是,会自动解压war包。
-
-
其次我们来说一下如何在docker镜像中部署我们的jar包。
-
比如说我们的springboot项目。一般来说我们都是默认生成了可执行jar包。我们在普通的java环境中是执行如下命令以启动jar包。
# 这里我们假设我们当前目录有test.jar文件 $ nohup java -Dserver.port=部署端口 -jar test.jar # nohup意为后台运行,他的日志文件会自动生成到当前目录下的nohup.out,当然也可以手动指定 # -Dserver.port=部署端口。这是为了指定我们的映射端口。也就是说不管我们jar包中的端口为多少。都以部署端口为准
-
从上面可以看出来我们的jar包运行时需要手动去执行启动命令的,那我们如何将其部署到docker镜像中呢?继续往下看。
-
同样的我们创建一个文件夹,将jar包copy进去。
-
然后通过vim编辑器创建一个Dockerfile
-
Dockerfile
# 指定基础镜像 from hub.c.163.com/library/tomcat # 这行为镜像信息,可有可无 MAINTAINER Leiyuan 15326047083@163.com # copy 当前目录下的test.jar到镜像根目录下test.jar ADD test.jar test.jar # 暴露端口,我这里记不清我项目里面暴露的端口是多少,所以我把可能的端口全部暴露出来 EXPOSE 8080 EXPOSE 8081 EXPOSE 80 # 这段是最终要的 # 这里是在容器启动成功后,在容器内执行如下命令。也就是 java -jar test.jar ENTRYPOINT ["java","-jar","test.jar"]
-
看到这里有人可能要问了。这样的话并非后台执行,关闭终端jar是不是就停止运行了呢?那这里解释一下,一般来说,我们启动容器时同样会是后台运行,所以容器内的命令就不用可以的去执行后台启动。
-
-
docker镜像所需要的文件我们都准备好了,紧接着我们来说说如何构建docker镜像。
Dockerfile、jar、war都准备好了,如何构建镜像?
-
首先我们还是要进入刚才创建好的文件夹。
-
然后执行如下命令
# -t 代表指明镜像名称和标签,千万注意后面还有一个 . 这个点代表当前目录 $ docker build -t 镜像名称:镜像标签 .
-
运行结果如上,那我们查询一下
$ docker images
-
查询没有问题,那我们的镜像就算是构建成功。
-
那剩下的就是照常起订就可以,这里就不再赘述。
结束语
- 本来以为今天可以说完的,但是脑子里又浮现了一些新的用途想法,所以今天先就到这里。
- 来说说剩余的知识点以及刚才在脑子里浮现出来的想法。
- 如何使用github实现自动构建镜像?
- 如何上传下载自己的镜像?
- 既然可以通过github实现镜像的自动构建,那我们是不是可以通过shell脚本在服务器做定时任务实现自动拉取镜像并且自动部署呢?
- 那上述三点,我们放到明天的文章里面进行讲述。
- 非常感谢大家的关注和支持,一定会有更多的好的知识点分享给大家。
- 感谢???!!!