编写自己的Tomcat docker镜像

x33g5p2x  于2021-11-22 转载在 Docker  
字(4.3k)|赞(0)|评价(0)|浏览(644)

编写自己的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的指令

  1. FROM # 基础镜像,一切从这里开始构建
  2. MAINTAINER # 镜像是谁写的, 姓名+邮箱
  3. RUN # 镜像构建的时候需要运行的命令
  4. ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
  5. WORKDIR # 镜像的工作目录
  6. VOLUME # 挂载的目录
  7. EXPOSE # 保留端口配置
  8. CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
  9. ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
  10. ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
  11. COPY # 类似ADD, 将我们文件拷贝到镜像中
  12. ENV # 构建的时候设置环境变量!

实战测试

创建一个自己的centos

  1. FROM centos
  2. MAINTAINER hyc<3132774018@qq,com>
  3. ENV MYPATH /usr/local
  4. WORKDIR $MYPATH
  5. RUN yum -y install vim
  6. RUN yum -y install net-tools
  7. EXPOSE 80
  8. CMD echo $MYPATH
  9. CMD echo "---end---"
  10. CMD /bin/bash
  11. # 2. 通过这个文件构建镜像
  12. # 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
  13. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
  14. Successfully built d2d9f0ea8cb2
  15. Successfully tagged mycentos:0.1
  16. #测试运行

对比之前原生的centos

我们增加了 vim 和 net-tools
!](https://img-blog.csdnimg.cn/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区别

  1. CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
  2. ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
测试CMD
  1. # 1. 编写dockerfile文件
  2. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-cmd-test
  3. FROM centos
  4. CMD ["ls", "-a"]
  5. # 2. 构建镜像
  6. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
  7. # 3. run运行, 发现我们的ls -a 命令生效
  8. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125
  9. .
  10. ..
  11. .dockerenv
  12. bin
  13. dev
  14. etc
  15. home
  16. lib
  17. lib64
  18. # 想追加一个命令 -l 变成 ls -al
  19. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 -l
  20. 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.
  21. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 ls -l
  22. # cmd的情况下 -l替换了CMD["ls", "-a"]命令, -l不是命令,所以报错了
测试ENTRYPOINT
  1. # 1. 编写dockerfile文件
  2. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-entrypoint-test
  3. FROM centos
  4. ENTRYPOINT ["ls", "-a"]
  5. # 2. 构建文件
  6. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint-test .
  7. # 3. run运行 发现我们的ls -a 命令同样生效
  8. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test
  9. .
  10. ..
  11. .dockerenv
  12. bin
  13. dev
  14. etc
  15. home
  16. lib
  17. # 4. 我们的追加命令, 是直接拼接到ENTRYPOINT命令的后面的!
  18. [root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test -l
  19. total 56
  20. drwxr-xr-x 1 root root 4096 Aug 13 07:52 .
  21. drwxr-xr-x 1 root root 4096 Aug 13 07:52 ..
  22. -rwxr-xr-x 1 root root 0 Aug 13 07:52 .dockerenv
  23. lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
  24. drwxr-xr-x 5 root root 340 Aug 13 07:52 dev
  25. drwxr-xr-x 1 root root 4096 Aug 13 07:52 etc
  26. drwxr-xr-x 2 root root 4096 May 11 2019 home
  27. lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
  28. lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64
  29. 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
  1. 准备镜像文件 tomcat压缩包,jdk的压缩包!

  1. 编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了!
  1. [root@iZwz90ps06ioyada63oiwiZ dockerfiletomcat]# cat Dockerfile
  2. FROM centos
  3. MAINTAINER hyc<3132774018@qq.com>
  4. COPY readme.txt /usr/local/readme.txt
  5. ADD jdk-8u311-linux-x64.tar.gz /usr/local/
  6. ADD apache-tomcat-9.0.54.tar.gz /usr/local/
  7. RUN yum -y install vim
  8. ENV MYPATH /usr/local
  9. WORKDIR $MYPATH
  10. ENV JAVA_HOME /usr/local/jdk1.8.0_311
  11. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  12. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
  13. ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.54
  14. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  15. EXPOSE 8080
  16. CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.54/bin/logs/catalina.out
  1. 启动并且挂载
  1. 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容器中,十分的方便

相关文章

最新文章

更多