[ Dockerfile | 青训营笔记 ]

79 阅读3分钟

初识Dockerfile

Dockerfile就是用来构建docker镜像的,就是一个docker脚本

通过脚本可以生成一个镜像

先新建一个dockerfile01.yaml

 FROM ubuntu
 ​
 VOLUME ["volume01", "volume02"]
 ​
 CMD echo "----end----"

我们使用`docker build -f dockerfile1.yml -t my/ubuntu:1.0 .去构建一个镜像

进入我们生成的镜像可以看到volume01和volume02,是我们挂载的卷

总结:dockerfile构建步骤

  1. 编写一个dockerfile文件
  2. docker build构建为一个镜像
  3. docker run 镜像
  4. docker push 发布镜像

两个docker容器进行卷的挂载

 # 首先根据我们的镜像创建第一个容器docker1
 $ docker run -it --name docker1 my/ubuntu:2.0
 ​
 $ docker run -it --name docker2 --volumes-from docker1  my/ubuntu:2.0 /bin/bash

然后我们在docker1volume01中创建一个111.test,在docker2volume01中也可以看到111.test

Dockerfile构建过程

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

dockerfile是面向开发的,我们要发布镜像,就需要编写一个dockerfile文件

Docker镜像逐渐成为企业交付的标准,必须掌握

  • DockerFile:构建文件,定义了一切的步骤,源代码
  • Docker image:通过DockerFile构建生成的镜像,最终发布和运行的产品!
  • Docker容器: 容器就是镜像运行起来提供服务

DockerFile 指令

 FROM        # 基础镜像,一切从这里开始
 # MAINTAINER    # 作者信息 (官方弃用)
 LABEL       # 作者信息
 RUN         # 镜像构建的时候需要运行的命令
 ADD         # 我们自己添加东西
 WOEKDIR     # 镜像的工作目录
 VOLUME      # 挂载的目录
 EXPORT      # 暴露的端口
 CMD         # 指定这个容器启动的时候运行的命令
 ENTRYPOINT  # 指定这个容器启动的时候运行的命令,可以追加命令
 ONBUILD     # 当构建一个被继承 DockerFile 这个时候就运行这个命令,触发指令
 COPY        # 类似ADD,将我们的文件拷贝到镜像中
 ENV         # 构建的时候设置环境变量

实战:构建自己的docker image

 FROM ubuntu:20.04
 LABEL "lz"="lz18738377974@163.com"
 LABEL version="0.1"
 ​
 RUN apt-get update
 RUN apt-get install -y vim
 RUN apt-get install -y net-tools
 ​
 ENV MYPATH /usr/local
 WORKDIR $MYPATH
 ​
 EXPOSE 80
 ​
 CMD echo $MYPATH
 CMD echo "----end----"
 CMD /bin/bash
 # 然后我们使用去构建一个docker image
 docker build -f ubuntuDF.yml -t testubuntu:01 .
 ​
 # 列出我们的构建过程
 docker history testubuntu:01
 IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
 16d09e4d5910   7 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   CMD ["/bin/sh" "-c" "echo "----end----""]     0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
 <missing>      7 minutes ago   RUN /bin/sh -c apt-get install -y vim # buil…   68.2MB    buildkit.dockerfile.v0
 <missing>      7 minutes ago   RUN /bin/sh -c apt-get install -y tmux # bui…   1.96MB    buildkit.dockerfile.v0
 <missing>      8 minutes ago   RUN /bin/sh -c apt-get update # buildkit        43MB      buildkit.dockerfile.v0
 <missing>      8 minutes ago   LABEL version=0.1                               0B        buildkit.dockerfile.v0
 <missing>      8 minutes ago   LABEL lz=lz18738377974@163.com                  0B        buildkit.dockerfile.v0
 <missing>      19 months ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
 <missing>      19 months ago   /bin/sh -c #(nop) ADD file:5d68d27cc15a80653…   72.8MB

cmd和entrypoint的区别

cmd:再使用命令会覆盖之前的命令

entrypoint:再使用命令不会覆盖之前的,只会在其基础上追加

Docker小结