Docker实践:如何编写自定义Tomcat镜像并发布?

电玩女神 2023-07-11 08:45 67阅读 0赞

用久了从DockerHub上白嫖来的镜像,不免想要开发一款自己的镜像供大家使用,或者满足自己的特殊需求。今天,我们就来根据官方CentOS镜像,一步步地将它改造成自定义的Tomcat镜像并发布到DockerHub,并重新pull到本地运行,以验证我们自定义镜像的效果。

作者环境:阿里云轻量 CentOS7.3

0.前言

在着手改造现有的CentOS之前,我们先要对Docker镜像的构成和来源有一个基本的认识。比如,当我们从官方pull一个镜像下来时,往往会发现它是被一层层下载下来的。
在这里插入图片描述事实上,每一个镜像的结构都是一层层组成的,类似于生活中的“千层饼”。因此我们自己创建镜像的时候,我们编写的Dockerfile文档中的一行行代码,都相当于在原来的基础镜像上新覆盖一层层的新内容。

基于以上的知识,我们对开发自定义的Docker镜像的步骤进行概述:

  1. 设计并编写Dockerfile。
  2. 基于Dockerfile文件进行build,创建自己的镜像到本地仓库。
  3. 发布前本地试运行。
  4. 提交到DockerHub。
  5. 从DockerHub上下载自己的镜像。

不多哔哔了,我们开始吧!

1. 编写Dockerfile

首先我们先建立一个新文件夹congzachariahtomcat,用于存放Dockerfile和Docker数据卷文件,以及构建镜像所需其它的一些资源。

  1. mkdir /mydocker/congzachariahtomcat
  2. cd congzachariahtomcat/

这一步因人而异。为了在CentOS的基础上建立属于自己的Tomcat镜像,我们需要jdk和一个新的tomcat。因此,我们需要提前下载好它们的压缩包。如图所示,作者已经提前下载好了它们。此外为了能够用上所有的Dockerfile保留字,我们还在里边新建了一个c.txt文本,用于接下来对于Docker改文件名的测试。

  1. touch c.txt

现在我们的文件夹里一共有三个文件了。
在这里插入图片描述
接下来就是我们最最重要的编写Dockerfile文件的环节。作者列出了本次自定义Tomcat的Dockerfile源码,并附上了注释。

  1. vim dockerfile

进入dockerfile后,我们按i进入插入模式,并粘贴以下源码。(以下的环境变量等请注意版本问题)

  1. FROM centos
  2. MAINTAINER congzachariah<congzheng1208@163.com>
  3. #把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
  4. COPY c.txt /usr/local/cincontainer.txt
  5. #把java与tomcat添加到容器中
  6. ADD jdk-8u241-linux-x64.tar.gz /usr/local/
  7. ADD apache-tomcat-9.0.0.M18.tar.gz /usr/local/
  8. #安装vim编辑器
  9. RUN yum -y install vim
  10. #设置工作访问时候的WORKDIR路径,登录落脚点
  11. ENV MYPATH /usr/local
  12. WORKDIR $MYPATH
  13. #配置java与tomcat环境变量
  14. ENV JAVA_HOME /usr/local/jdk1.8.0_241
  15. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  16. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.0.M18
  17. ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.0.M18
  18. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  19. #容器运行时监听的端口
  20. EXPOSE 8080
  21. #启动时运行tomcat
  22. CMD /usr/local/apache-tomcat-9.0.0.M18/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.0.M18/bin/logs/catalina.out

按Esc键退出,并按Shift+;键进入底行模式,输入wq并回车,成功保存dockerfile。

2. build镜像到本地仓库

接下来的一步就是把dockerfile源码构建成一个镜像了,我们可以参考以下命令行的写法。

其中,-f 后边接dockerfile文件的绝对路径,-t 后边接新镜像的名字和版本号(注意不要遗漏最后的句号 “.”

  1. docker build -f /mydocker/congzachariahtomcat/dockerfile -t cztomcat:1.1 .

如果能够正常构建,画风应该是这样的。我们看到它在针对我们dockerfile文件中的保留字指令一行行地解析,就好像在千层饼的外边一层层地包裹。
在这里插入图片描述我们通过docker images命令来查看本地仓库的镜像,发现我们的镜像果然构建成功了!
在这里插入图片描述

3. 提交本地镜像至DockerHub

在提交之前,我们首先要注册一个DockerHub的账号,并开辟自己的一个仓库。我们创建了一个名为“cztomcat”的仓库,并把它和作者的Github连接到了一起。
在这里插入图片描述
接下来就是把我们在本地仓库的cztomcat镜像发布到DockerHub上的时候了。我们先登陆自己的DockerLub账号。

  1. docker login

接着我们需要对镜像进行改名。这里要注意的一点是,我们必须要在改的名字前边加上我们的Dockerhub账号名。作者的DockerHub账号是congzachariah,因此具体命令行如下:

  1. docker tag f832b5ae7fd8 congzachariah/cztomcat:1.1

接下来就是把本地镜像pash到DockerHub上去。

  1. docker push congzachariah/cztomcat:1.1

在这里插入图片描述
执行完这一步后,我们打开自己的DockerHub,会惊奇地发现已经提交成功了。
在这里插入图片描述
我们用docker search命令也能够搜到自己刚才提交上去的镜像。
在这里插入图片描述

4. 从DockerHub上下载镜像

这一步不用多说,我们直接一行docker pull搞定。这里要注意的一点是我们的镜像已经改过名了,因此我们需要写入我们的新名字congzachariah/cztomcat:1.1

  1. docker pull congzachariah/cztomcat:1.1

我们来看一眼我们下载过来的镜像。

在这里插入图片描述不难发现,除了改了个名字,这个新下载过来的镜像和我们本地仓库保存的旧镜像连IMAGE ID都相同。

5. 运行自己的镜像

我们通过以下的命令运行一下它。

  1. docker run -d -p 9080:8080 --name myt9 -v /mydocker/congzachariahtomcat/test:/usr/local/apache-tomcat-9.0.0.M18/webapps/test -v /mydocker/congzachariahtomcat/tomcat9logs/:/usr/local/apache-tomcat-9.0.0.M18/logs --privileged=true f832b5ae7fd8

这一步因人而异。可能有同学对于这行的功能不太理解。

-p代表修改端口映射。

–name代表修改容器名称。

关于-v,前边的dockerfile文件中有提到过,我们新建了两个数据卷,因此这里run的时候我们加了两个-v命令,用于把宿主机的/mydocker/congzachariahtomcat/test和docker容器中的/usr/local/apache-tomcat-9.0.0.M18/webapps/test相对应起来,tomcat9logslogs同理。这意味着我们以后想部署自己的web项目时,直接修改宿主机的/mydocker/congzachariahtomcat/test,就可以把项目部署在Tomcat的Docker容器里了。

我们运行一下,发现容器已经跑起来了。
在这里插入图片描述我们在浏览器输入地址(http://ip:端口号),如果出现以下界面,代表我们已经成功地部署了我们自定义的Tomcat项目。

在这里插入图片描述最后,我们以一张Docker命令图作为总结。

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,67人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Docker(二) 定义镜像

    一、前言 记得上半年有一个需求是给服务(mysql)兼容oracle数据库,之前没有怎么接触过oracle数据库,也没有安装过,于是从同事那里要来了安装包(windows