前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编写自己的Tomcat docker镜像

编写自己的Tomcat docker镜像

作者头像
冷环渊
发布2021-11-10 11:05:05
6480
发布2021-11-10 11:05:05
举报

编写自己的Tomcat docker镜像

dockerfile

dockerfile介绍

用来构建docker 镜像的

构建步骤:

  • 编写一个docker file 文件
  • docker build 构建成一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(Docker hub 阿里云镜像)

我们来看看官方是怎么做的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBWUqX0G-1636207693217)(docker.assets/image-20211106170721576.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBWUqX0G-1636207693217)(docker.assets/image-20211106170721576.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAidRpGu-1636207693219)(docker.assets/image-20211106172154705.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAidRpGu-1636207693219)(docker.assets/image-20211106172154705.png)]

很多官方的镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

官方可以制作镜像,那我们也可以

DockerFile构建过程

基础知识

  • 每个保留关键字,指令都必须是大写字母
  • 执行从上到下执行
  • #表示注释
  • 每个指令都会创建提交一个新的镜像层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsIxm0Bt-1636207693220)(docker.assets/image-20211106172456651.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsIxm0Bt-1636207693220)(docker.assets/image-20211106172456651.png)]

dockerfile是面向开发的,我i们以后需要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。

我们要掌握dockerfile 就基本可以掌握常用的docker镜像企业交付了

dockerfile :构建文件,定义了一切步骤,源代码

dockerimages:通过dockerfile生成的镜像,最终发布和运行的产品

docker容器:容器就是镜像运行起来,提供服务的

Dockerfile的指令

代码语言:javascript
复制
FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 保留端口配置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD         # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gScGh2vX-1636207693221)(docker.assets/image-20211106172810755.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gScGh2vX-1636207693221)(docker.assets/image-20211106172810755.png)]

实战测试

创建一个自己的centos

代码语言:javascript
复制
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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ww9Lk5hg-1636207693222)(docker.assets/image-20211106180200362.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ww9Lk5hg-1636207693222)(docker.assets/image-20211106180200362.png)]

我们增加了 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3jINbwM-1636207693223)(docker.assets/image-20211106180537787.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3jINbwM-1636207693223)(docker.assets/image-20211106180537787.png)]

我们平时拿到一个镜像可以研究他是怎么构建的

CMD 和ENTRYPOINT区别

代码语言:javascript
复制
CMD         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
测试CMD
代码语言:javascript
复制
# 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
代码语言:javascript
复制
# 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

成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deYpHlr5-1636207693224)(docker.assets/image-20211106212344365.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deYpHlr5-1636207693224)(docker.assets/image-20211106212344365.png)]

我们同时挂载了 test 目录,当我们向容器加入自己的内容到时候,可以直接从宿主机放入文件,可以直接同步到docker容器中,十分的方便

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写自己的Tomcat docker镜像
    • dockerfile
      • dockerfile介绍
      • DockerFile构建过程
      • Dockerfile的指令
      • 实战测试
      • 实战 tomcat
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档