DockerFile指令语法与生成过程
一、构建步骤
1、编写一个dockerfile文件
2、docker build 构建一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(Docker Hub、阿里云镜像仓库)
二、Dockerfile构建过程
1、每个保留关键字(指令)必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
三、DockerFile指令
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像作者姓名、邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像工作的目录
VOLUME #挂载卷的目录
EXPOST #暴露端口位置
CMD #指定这个容器启动时要运行的命令,只有最后一个命令会生效,可被替代
ENTRYPOINT #指定这个容器启动时要运行的命令,可以追加命令
ONBUILD #当构建一个被继承 Dockerfile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建时设置环境变量
四、测试
Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch ,然后配置需要的软件和配置来进行构建
五、创建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