DockerFile解析(CentOS 7)

 

1. DorkerFile

DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

2. 构建步骤

构建三步骤:

编写DockerFile文件

l docker build

l docker run

 

3. 指令

3.1. 常用指令

  1. FROM 功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch
  2. MAINTAINER 说明作者
  3. RUN 运行指定的命令
  4. ENV 设置环境变量
  5. WORKDIR 设置工作目录
  6. ADD 一个复制命令,把文件复制到镜像中
  7. COPY 复制指令
  8. CMD 容器启动时要运行的命令,可以多条,但是只有最后一条起效
  9. ENTRYPOINT 容器启动时的默认命令只能写一条
  10. LABEL 为镜像指定标签
  11. EXPOSE 记录服务可用的端口,但是并不创建和宿主机之间的映射
  12. VOLUME 实现挂载功能,将本地文件夹或者其他容器中文件夹挂在到当前容器中
  13. ONBUILD 为镜像添加触发器。其参数是任意一个Dockerfile指令。只在被子镜像继承时触发。

3.2. 优化建议

  1. ADDVOLUME尽量放在dockerfile底部
  2. 多个RUN的时候可以通过&& 集合成一条指令,减少容器层数
  3. 能用COPY的地方就不要用RUN cp
  4. dockerfile当前目录最好不要放无关文件

4. 案例

4.1. 自定义镜像

4.1.1. 新建脚本

vi myCentOS.df

FROM centos

MAINTAINER gongxr

ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum -y install vim

RUN yum -y install net-tools

EXPOSE 22 80

CMD echo "----success----"

CMD ["/bin/bash"]

4.1.2. 构建

docker build -f ./myCentOS.df -t mycentos:1.1 .

4.1.3. 运行

docker run -it --name mycentos -P  mycentos:1.1

4.1.4. 查看历史

docker history 24cfa63644dc  #镜像ID

docker history mycentos:1.1 --no-trunc  #完整显示

[root@localhost dockerFile]# docker history mycentos:1.1

IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT

1a829f894153        About a minute ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 

d270ce700b5e        24 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "ec...   0 B                 

556fea5422a4        24 minutes ago       /bin/sh -c #(nop)  EXPOSE 22/tcp 80/tcp         0 B                 

35cb1da810fe        24 minutes ago       /bin/sh -c yum -y install net-tools             22.9 MB             

897c2d62f01f        25 minutes ago       /bin/sh -c yum -y install vim                   57.3 MB             

b5932f89e3d0        26 minutes ago       /bin/sh -c #(nop) WORKDIR /usr/local            0 B                 

d5437421e4ec        26 minutes ago       /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0 B                 

812bb1aa5cab        26 minutes ago       /bin/sh -c #(nop)  MAINTAINER gongxr            0 B                 

0d120b6ccaa8        2 weeks ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 

<missing>           2 weeks ago          /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 

<missing>           2 weeks ago          /bin/sh -c #(nop) ADD file:538afc0c5c964ce...   215 MB

4.2. ENTRYPOINT举例

vi dockerFile.ds

FROM centos

RUN yum install -y curl

ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

运行容器

docker run myImages  -i

使用ENTRYPOINT 命令在运行容器时可以追加参数。

ENTRYPOINT容器启动时的默认命令只能写一条

4.3. 自定义tomcat

4.3.1. Dockfile

根据centos镜像生成自定义的tomcat镜像:

FROM  centos

MAINTAINER    gongxr<xxx@163.com>

#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下

#COPY test.txt /usr/local/test.txt

#javatomcat添加到容器中

ADD jdk-8u212-linux-x64.tar.gz /usr/local/

ADD apache-tomcat-8.5.13.tar.gz /usr/local/

#安装vim编辑器

RUN yum -y install vim

#设置工作访问时候的WORKDIR路径,登录落脚点

ENV MYPATH /usr/local

WORKDIR $MYPATH

#配置javatomcat环境变量

ENV JAVA_HOME /usr/local/jdk1.8.0_212

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.13

ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.13

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

#容器运行时监听的端口

EXPOSE  8080

#添加执行权限

RUN chmod u+x /usr/local/apache-tomcat-8.5.13/bin/*

#启动时运行tomcat

# ENTRYPOINT ["/usr/local/apache-tomcat-8.5.13/bin/startup.sh" ]

# CMD ["/usr/local/apache-tomcat-8.5.13/bin/catalina.sh","run"]

CMD /usr/local/apache-tomcat-8.5.13/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.13/bin/logs/catalina.out

4.3.2. 生成镜像

docker build -f myTomcat2.ds  -t mytomcat2  .

4.3.3. 运行

docker run  -d  -p 9080:8080  --name myTomcatCon 

-v /root/dockerFile/tomcatDir/test:/usr/local/apache-tomcat-8.5.13/webapps/test 

-v /root/dockerFile/tomcatDir/tomcatlogs:/usr/local/apache-tomcat-8.5.13/logs 

--privileged=true mytomcat2

原文地址:https://www.cnblogs.com/gongxr/p/13563152.html