Dockerfile 学习笔记

Dockerfile

Dockerfile是一个创建镜像所有命令的文本文件,包含了一条条指令和说明,每条指令构建一层,通过docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容,就是描述该层如何构建。有了Dockefile,就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令,就可生成docker镜像。

指令&说明

指令说明
FROM指定基础镜像
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR镜像的工作目录
VOLUME挂载的目录
EXPOSE保留端口配置
CMD指定这个容器启动的时候要运行的命令(只有最后一个会生效)
EMTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV构建的时候设置环境变量

形象解释

指令解释
FROM这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER告诉别人,谁负责养它?(指定维护者信息)
RUN你想让它干啥(在命令前面加上RUN即可)
ADD给它点创业资金(COPY文件,会自动解压)
WORKDIR我是cd,换了个命令(设置当前工作目录)
VOLUME给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE它要打开的门是啥(指定对外的端口)
RUN跑起来把!(指定容器启动后要做的事)

注意点

  • Dockerfile 中第一个指令必须是FROM。
  • Dockerfile 中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录。
  • Dockerfile 中相对路径默认都是Dockerfile所在的目录。
  • Dockerfile 中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性。
  • Dockerfile 中每一条指令被视为一层。
  • Dockerfile 中指明大写(约定俗成)。

制作镜像

通过编写Dockerfile文件来制作Centos镜像,并在官方镜像的基础上添加vim和net-tools工具。首先在 /root/centos 目录下新建文件 Dockerfile 。然后使用上述指令编写该文件。

mkdir /root/centos
cd /root/centos
vim Dockerfile
FROM centos
MAINTAINER xiaogushi<35672477@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
逐行解释
  • FROM centos 该image文件继承官方的centos,后面加冒号如centos:7,用于指定镜像的版本。
  • ENV MYPATH /usr/local 设置环境变量MYPATH ,后面有用到。
  • WORKDIR $MYPATH 直接使用上面设置的环境变量,指定 /usr/local 为工作目录。
  • RUN yum -y install vim & RUN yum -y install net-tools 在 /usr/local 目录下,运行 yum -y install vim 和 yum -y install net-tools 命令安装工具,注意安装后的所有依赖和工具都会打包到image文件中。
  • EXPOSE 80 将容器80端口暴露出来,允许外部连接这个端口。
  • CMD 三条 CMD 命令指定容器启动的时候运行命令。

构建镜像

# docker build -f Dockerfile文件路径 -t 镜像名:Tag名 dir
docker build -f Dockerfile -t centos:latest .

完成后可以使用 docker images 查看刚构建的镜像ID。
通过 docker history 容器ID 命令来查看镜像的构建步骤。


# docker history 容器ID

IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
1185a46e3a12   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
83459c404586   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
9b8661c812c4   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
2064c1540e8e   13 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
1b15d4a1fd5e   13 minutes ago   /bin/sh -c yum -y install net-tools             23.3MB    
9336c20f0b6d   13 minutes ago   /bin/sh -c yum -y install vim                   58MB      
7d46880ef0fd   14 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
e27a56b5247b   14 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
b2b6851e55fa   14 minutes ago   /bin/sh -c #(nop)  MAINTAINER ethan<12583985…   0B        
300e315adb2f   3 weeks ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      3 weeks ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      3 weeks ago      /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB  

tips

当使用 Dockerfile 构建镜像时,所在的目录一定要使用一个干净的目录(最好新建一个),以免目录下有其他文件(构建会加载当前目录下所有文件,导致磁盘爆满)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小故事里的海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值