
Summer
Sunshine

前言:Dockerfile是构建docker镜像常用的方式,dockerfile有自己的语法,每条语句都是镜像的描述文件,通过Dockerfile,让我们对镜像的构建更加方便。
Dockerfile 一般分为四部分:From 基础镜像信息,Maintainer 维护者信息,镜像操作指令,容器启动时执行指令,’#’ 为 Dockerfile 中的注释
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。
如下是常用命令举例:

准备工作
首先我们需要选择一个基础镜像,在选择镜像的时候,需要选择合适的镜像,例如构建一个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 completeDigest: 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:latestMAINTAINER zhang@qq.comADD 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 tomcatEXPOSE 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.gz3 层镜像。可简化为以下格式: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命令执行的时候,可以通过&&连接,构建的时候只构建一层镜像。
检查构建的镜像
[]REPOSITORY TAG IMAGE ID CREATED SIZEtomcat v1 b3fdfdca6b5e 6 minutes ago 550 MB
使用构建的镜像创建容器
docker run -itd -p 8091:8080 --name=webtomcat tomcat:v1
[]b9cf84288ab5c82b16f251c7806e007f4b5f7ebb68f7777786bf69afc635481a[][]CONTAINER 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.shUsing 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
浏览器检查,服务正常

保存镜像
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源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4581716/blog/4375016


