编写自己的Tomcat docker镜像
dockerfile
dockerfile介绍
用来构建docker 镜像的
构建步骤:
编写一个docker file 文件
docker build 构建成一个镜像
docker run 运行镜像
docker push 发布镜像(Docker hub 阿里云镜像)
我们来看看官方是怎么做的
很多官方的镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
官方可以制作镜像,那我们也可以
DockerFile构建过程
基础知识:
每个保留关键字,指令都必须是大写字母
执行从上到下执行
#表示注释
每个指令都会创建提交一个新的镜像层
dockerfile是面向开发的,我i们以后需要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。
我们要掌握dockerfile 就基本可以掌握常用的docker镜像企业交付了
dockerfile :构建文件,定义了一切步骤,源代码
dockerimages:通过dockerfile生成的镜像,最终发布和运行的产品
docker容器:容器就是镜像运行起来,提供服务的
Dockerfile的指令
FROM # 基础镜像,一切从这里开始构建 MAINTAINER # 镜像是谁写的, 姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 保留端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令 ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令 COPY # 类似ADD, 将我们文件拷贝到镜像中 ENV # 构建的时候设置环境变量!
实战测试
创建一个自己的centos
FROM centos MAINTAINER hyc<3132774018@qq,com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "---end---" CMD /bin/bash # 2. 通过这个文件构建镜像 # 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] . [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 . Successfully built d2d9f0ea8cb2 Successfully tagged mycentos:0.1 #测试运行
对比之前原生的centos
我们增加了 vim 和 net-tools
!](https://ucc.alicdn.com/images/user-upload-01/70d154bf1e304697ad51d6693d6ad385.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZG9vbXdhdGNoZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
我们可以查看一下镜像的变更历史
docker history <imagesid>
我们平时拿到一个镜像可以研究他是怎么构建的
CMD 和ENTRYPOINT区别
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
测试CMD
# 1. 编写dockerfile文件 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-cmd-test FROM centos CMD ["ls", "-a"] # 2. 构建镜像 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest . # 3. run运行, 发现我们的ls -a 命令生效 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 . .. .dockerenv bin dev etc home lib lib64 # 想追加一个命令 -l 变成 ls -al [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 ls -l # cmd的情况下 -l替换了CMD["ls", "-a"]命令, -l不是命令,所以报错了
测试ENTRYPOINT
# 1. 编写dockerfile文件 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-entrypoint-test FROM centos ENTRYPOINT ["ls", "-a"] # 2. 构建文件 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint-test . # 3. run运行 发现我们的ls -a 命令同样生效 [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test . .. .dockerenv bin dev etc home lib # 4. 我们的追加命令, 是直接拼接到ENTRYPOINT命令的后面的! [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test -l total 56 drwxr-xr-x 1 root root 4096 Aug 13 07:52 . drwxr-xr-x 1 root root 4096 Aug 13 07:52 .. -rwxr-xr-x 1 root root 0 Aug 13 07:52 .dockerenv lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin drwxr-xr-x 5 root root 340 Aug 13 07:52 dev drwxr-xr-x 1 root root 4096 Aug 13 07:52 etc drwxr-xr-x 2 root root 4096 May 11 2019 home lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64 drwx------ 2 root root 4096 Aug 9 21:40 lost+found
实战 tomcat
这里我们先准备好 需要用到的 安装包
apache-tomcat-9.0.54.tar.gz
jdk-8u311-linux-x64.tar.gz
准备镜像文件 tomcat压缩包,jdk的压缩包!
编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了!
[root@iZwz90ps06ioyada63oiwiZ dockerfiletomcat]# cat Dockerfile FROM centos MAINTAINER hyc<3132774018@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u311-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.54.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_311 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.54 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.54/bin/logs/catalina.out
启动并且挂载
docker run -d -p 3344:8080 --name hyctomcat11 -v /dockerTest/dockerfiletomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /dockerTest/dockerfiletomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.54/logs diytomcat
1
访问 3344端口
成功
我们同时挂载了 test 目录,当我们向容器加入自己的内容到时候,可以直接从宿主机放入文件,可以直接同步到docker容器中,十分的方便