Dockerfile构建Tomcat镜像

不想你离开。 提交于 2021-02-14 15:29:40

点击蓝字 关注我们

Summer

Sunshine


前言:Dockerfile是构建docker镜像常用的方式,dockerfile有自己的语法,每条语句都是镜像的描述文件,通过Dockerfile,让我们对镜像的构建更加方便。




 1 

Dockerfile的语法解释

Dockerfile 一般分为四部分:From 基础镜像信息,Maintainer 维护者信息,镜像操作指令,容器启动时执行指令,’#’ 为 Dockerfile 中的注释

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

如下是常用命令举例:


 2

构建tomcat镜像


  • 准备工作

首先我们需要选择一个基础镜像,在选择镜像的时候,需要选择合适的镜像,例如构建一个Java应用的镜像,选择一个openjdk镜像作为基础镜像比选择一个alpine镜像作为基础镜像要简单地多,构建的镜像文件越小,程序的启动速度就会越快。由于本次环境在特定的java版本上运行,所以我选择在我的debian基础镜像上安装java+tomcat.

下载基础镜像debian

Last login: Mon Jun 15 22:46:48 2020 from 192.168.124.11[root@k8s-node2 ~]# docker pull debianUsing default tag: latestTrying to pull repository docker.io/library/debian ... latest: Pulling from docker.io/library/debiane9afc4f90ab0: Pull complete Digest: sha256:46d659005ca1151087efa997f1039ae45a7bf7a2cbbe2d17d3dcbda632a3ee9aStatus: Downloaded newer image for docker.io/debian:latest[root@k8s-node2 ~]# docker imagesREPOSITORY                              TAG                 IMAGE ID            CREATED             SIZEdocker.io/debian                        latest              1b686a95ddbf        6 days ago          114 MB

在物理机/root/tomcat目录下准备如下内容

Tomcat依赖java环境,本机环境配置如下

jdk-8u221-linux-x64.tar.gz

apache-tomcat-8.5.55.tar.gz

下载地址

链接: 

https://pan.baidu.com/s/1BotOAyo4KfiGZD-GaXXQfg

提取码: id8j

root@k8s-node2 tomcat]# lsapache-tomcat-8.5.55.tar.gz  Dockerfile  jdk-8u221-linux-x64.tar.gz

Dockerfile编辑内容如下

FROM docker.io/debian:latest   MAINTAINER zhang@qq.com
ADD jdk-8u221-linux-x64.tar.gz /usr/local/ADD apache-tomcat-8.5.55.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_221ENV PATH $PATH:$JAVA_HOME/binENV CATALINA_HOME_BASE /usr/localENV CATALTNA_HOME /usr/local/tomcatENV PATH $PATH:$CATALTNA_HOME/binWORKDIR $CATALINA_HOME_BASERUN mv apache-tomcat-8.5.55 tomcat
EXPOSE 8080CMD ["catalina.sh", "run"]

安装包,Dockerfile准备完成,我们开始构建镜像吧!

  • 开始构建

docker build -t tomcat:v1 . 

[root@k8s-node2 tomcat]# docker build -t tomcat:v1 .Sending build context to Docker daemon 205.5 MBStep 1/13 : FROM docker.io/debian:latest ---> 1b686a95ddbfStep 2/13 : MAINTAINER zhang@qq.com ---> Using cache ---> 2ace60f63b25Step 3/13 : ADD jdk-8u221-linux-x64.tar.gz /usr/local/ ---> Using cache ---> 0435287219d3Step 4/13 : ADD apache-tomcat-8.5.55.tar.gz /usr/local/ ---> Using cache ---> 0d84edcab38dStep 5/13 : ENV JAVA_HOME /usr/local/jdk1.8.0_221 ---> Using cache ---> f39ef60286eeStep 6/13 : ENV PATH $PATH:$JAVA_HOME/bin ---> Using cache ---> c96f871df3eaStep 7/13 : ENV CATALINA_HOME_BASE /usr/local ---> Using cache ---> 037f6afb9c92Step 8/13 : ENV CATALTNA_HOME /usr/local/tomcat ---> Using cache ---> 0e91cf4f4984Step 9/13 : ENV PATH $PATH:$CATALTNA_HOME/bin ---> Running in 17671e7135a7 ---> 0210d2aebec7Removing intermediate container 17671e7135a7Step 10/13 : WORKDIR $CATALINA_HOME_BASE ---> 5656361ba55eRemoving intermediate container 49b6ca7b4669Step 11/13 : RUN mv apache-tomcat-8.5.55 tomcat ---> Running in 04bf82f5e219 ---> 19aa10609672Removing intermediate container 04bf82f5e219Step 12/13 : EXPOSE 8080 ---> Running in 0891974ff73f ---> 0096cc602adcRemoving intermediate container 0891974ff73fStep 13/13 : CMD catalina.sh run ---> Running in 282949741efe ---> ac7c1de8d34bRemoving intermediate container 282949741efeSuccessfully built ac7c1de8d34b

构建完成,可以看到,构建的每一层都会产生一个containerId,所以为了减少镜像包大小,尽量能够减少层级。

优化举例

FROM centosRUN yum install wgetRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"RUN tar -xvf redis.tar.gz以上执行会创建 3 层镜像。可简化为以下格式:FROM centosRUN yum install wget \    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \    && tar -xvf redis.tar.gz

当存在多个RUN命令执行的时候,可以通过&&连接,构建的时候只构建一层镜像。

检查构建的镜像

[root@k8s-node2 tomcat]# docker imagesREPOSITORY                              TAG                 IMAGE ID            CREATED             SIZEtomcat                                  v1                  b3fdfdca6b5e        6 minutes ago       550 MB
  • 使用构建的镜像创建容器

docker run -itd -p 8091:8080 --name=webtomcat  tomcat:v1
[root@k8s-node2 tomcat]# docker run -itd -p 8091:8080 --name=webtomcat tomcat:v1b9cf84288ab5c82b16f251c7806e007f4b5f7ebb68f7777786bf69afc635481a[root@k8s-node2 tomcat]# [root@k8s-node2 tomcat]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMESa4a2dec6dcf2        tomcat:v1           "/bin/bash"         4 seconds ago       Up 3 seconds        0.0.0.0:8090->8080/tcp   webtomcat
  • 应用检查

[root@k8s-node2 tomcat]# docker exec -it a4a2dec6dcf2 bashroot@a4a2dec6dcf2 :/usr/local# java -versionjava version "1.8.0_221"Java(TM) SE Runtime Environment (build 1.8.0_221-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)root@a4a2dec6dcf2 :/usr/local# cd tomcat/bin/root@a4a2dec6dcf2 :/usr/local/tomcat/bin# ./version.sh Using CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/local/jdk1.8.0_221Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarServer version: Apache Tomcat/8.5.55Server built:   May 5 2020 22:10:54 UTCServer number:  8.5.55.0OS Name:        LinuxOS Version:     3.10.0-862.11.6.el7.x86_64Architecture:   amd64JVM Version:    1.8.0_221-b11JVM Vendor:     Oracle Corporation

浏览器检查,服务正常


 3

镜像管理


  • 保存镜像

docker save -o tomcat.tar tomcat:v1

[root@k8s-node2 tomcat]# docker imagesREPOSITORY                              TAG                 IMAGE ID            CREATED             SIZEtomcat                                  v1                 b3fdfdca6b5e         16 minutes ago      550 MB[root@k8s-node2 tomcat]# docker save -o tomcat.tar tomcat:v1[root@k8s-node2 tomcat]# lsapache-tomcat-8.5.55.tar.gz  Dockerfile  jdk-8u221-linux-x64.tar.gz  tomcat.tar

然后我们可以将镜像拷贝在其余服务器上,通过命令

docker load -i tomcat.tar加载镜像

tomcat.tar镜像下载
链接: 

https://pan.baidu.com/s/1oJbokAWTwdCBVZhM3f5oww 

提取码: ub45


往期精选

July  2020

—— E N D ——

文字:原创  

扫描二维码

关注我们

微信公众号 : 运维之美

好看的人都在点

在看




本文分享自微信公众号 - 运维之美(ywzm8976)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!