DockerFile指令语法与生成过程

一、构建步骤

1、编写一个dockerfile文件
2、docker build 构建一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(Docker Hub、阿里云镜像仓库)

二、Dockerfile构建过程

1、每个保留关键字(指令)必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交

dockerfile执行run 执行find 并赋值_centos

三、DockerFile指令

FROM                       #基础镜像,一切从这里开始
MAINTAINER                 #镜像作者姓名、邮箱
RUN                        #镜像构建时需要运行的命令
ADD                        #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR                    #镜像工作的目录
VOLUME                     #挂载卷的目录
EXPOST                     #暴露端口位置
CMD                        #指定这个容器启动时要运行的命令,只有最后一个命令会生效,可被替代
ENTRYPOINT                 #指定这个容器启动时要运行的命令,可以追加命令
ONBUILD                    #当构建一个被继承 Dockerfile 这个时候就会运行  ONBUILD 的指令,触发指令
COPY                       #类似ADD,将我们文件拷贝到镜像中
ENV                        #构建时设置环境变量

dockerfile执行run 执行find 并赋值_vim_02

四、测试

Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch ,然后配置需要的软件和配置来进行构建

dockerfile执行run 执行find 并赋值_vim_03

五、创建mycentos

#1、编写dockerfile文件
[root@172-0-0-2 dockerfile]# cat mycentos01 
FROM centos

MIAINTAINER why<138027256@qq.com>

ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum install -y vim

RUN yum install net-tools

EXPOSE 22 

CMD echo $MYPATH

CMD echo "---end---

CMD /bin/bash

#2、docker build -f dockerfile -t name:1.0
命令:docker build f dockerfile文件路径 -t 镜像名:[tag]

#3、测试运行

六、CMD和ENTRYPOINT区别

CMD           #指定这个容器启动时要运行的命令,只有最后一个命令生效,可被替代
ENTRYPOINT    #指定这个容器启动时要运行的命令,可以追加命令

测试CMD

编写 dockerfile 文件
[root@172-0-0-2 ~]# vim dockerfile-cmd-test
FROM  centos
CMD [“ls”,“-a”]

#构建镜像
[root@172-0-0-2 ~]# docker build -f dockerfile-cmd-tes -t cmdtest .

#run运行,发现我们的 ls -a 生效
#想追加一个命令 -l ls -al
#cmd的清理下 -l 替换了CMD [“ls”,["-a"] 命令,-l 不是命令提示报错

测试ENTRYPOINT

#编写 dockerfile 文件
[root@172-0-0-2 ~]# vim dockerfile-cmd-entrypoint
FROM  centos
ENTRYPOINT  [“ls”,“-a”]
#追加的命令,是直接拼接在ENTRYPOINT命令的后面
[root@172-0-0-2 ~]# docker run centos -l

了解他们的区别,最好的学习方式就是对比他们,然后测试

七、查看镜像生成方式

[root@172-0-0-2 ~]# docker history --help 

Usage:  docker history [OPTIONS] IMAGE

Show the history of an image    #显示镜像变动历史

Options:
      --format string   Pretty-print images using a Go template
  -H, --human           Print sizes and dates in human readable format (default true)
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs