什么是DockerFile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
构建步骤

  1. 编写Dockerfile文件
  2. docker build 构建镜像
  3. docker run

DockerFile构建过程

1、基础知识

每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交

2、流程

docker从基础镜像运行一个容器
执行一条指令并对容器做出修改
执行类似docker commit的操作提交一个新的镜像层
Docker再基于刚提交的镜像运行一个新容器
执行dockerfile中的下一条指令直到所有指令都执行完成。

说明:
从应用软件的角度来看,docker镜像与docker容器分别代表软件的三个不同阶段。

DockerFile是软件的原材料(代码)
Docker 镜像则是软件的交付品(apk)
Docker容器则是软件的运行状态(客户下载安装执行)
DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及到部署和运维,三者缺一不可。

DockerFile:需要定义一个dockerFile,Dockerfile定义了进程需要的一切东西。
DockerFile涉及到的内容包括执行代码或者文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等。

Docker镜像:在DockerFile定义了一个文件之后,Docker build时会产生一个Docker镜像,当运行Docker镜像时,会真正开始提供服务
Docker容器:容器是直接提供服务的

DockerFile指令

2023-07-15_131022.png

2023-07-15_131023.png.jpg

2023-07-15_131024.png.jpg

实战测试

Docker Hub中99%的镜像都是通过在base镜像(Scratch)中安装和配置需要的软件构建出来的。
1、编写DockerFile
官方默认的CentOS的情况,是不具备一些vim编辑器、查看网络配置ifconfig。
目的:使我们自己的镜像具备如下:登陆后的默认路径、vim编辑器、查看网络ifconfig。

vim dockerfile-centos
FROM centos:7
MAINTAINER zhangxiansen <zhangxiansen@itcloudblog.cn>

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

2、构建

构建命令: docker build -f dockerfile-centos -t mycentos:0.1 .
命令说明:docker build -f dockerfile文件 -t 新镜像名字:TAG .
[+] Building 142.9s (8/8) FINISHED                                                                                                             
 => [internal] load .dockerignore                                                                                                         2.4s
 => => transferring context: 2B                                                                                                           0.0s
 => [internal] load build definition from dockerfile-centos                                                                               2.0s
 => => transferring dockerfile: 338B                                                                                                      0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                              23.9s
 => [1/4] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                        18.1s
 => => resolve docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                         2.9s
 => => sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 1.20kB / 1.20kB                                            0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                                0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                                            0.0s
 => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                                          4.1s
 => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                                                 8.8s
 => [2/4] WORKDIR /usr/local                                                                                                              0.5s
 => [3/4] RUN yum -y install vim                                                                                                         68.0s
 => [4/4] RUN yum -y install net-tools                                                                                                   23.5s 
 => exporting to image                                                                                                                    4.6s 
 => => exporting layers                                                                                                                   4.4s 
 => => writing image sha256:baa80f931b670a94c9b98770e964c9e567a0375797963da04426095d72307cc0                                              0.2s 
 => => naming to docker.io/library/mycentos:0.1   

3、运行

运行命令:docker run -it mycentos:0.1 
命令说明:docker run -it 新镜像名字:TAG
[root@37c3ab61279e local]# pwd
/usr/local
[root@37c3ab61279e local]# vim test
[root@37c3ab61279e local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2023-07-20_160038.jpg

可以看到,我们自己的新镜像已经支持vim/ifconfig 的命令,扩展OK。

4、列出镜像变更历史

[root@localhost dockerfile-test]# docker history baa80f931b67
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
baa80f931b67   20 hours ago    CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      20 hours ago    CMD ["/bin/sh" "-c" "echo \"----------end\t\…   0B        buildkit.dockerfile.v0
<missing>      20 hours ago    CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
<missing>      20 hours ago    EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      20 hours ago    RUN /bin/sh -c yum -y install net-tools # bu…   185MB     buildkit.dockerfile.v0
<missing>      20 hours ago    RUN /bin/sh -c yum -y install vim # buildkit    269MB     buildkit.dockerfile.v0
<missing>      20 hours ago    WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
<missing>      20 hours ago    ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
<missing>      20 hours ago    MAINTAINER zhangxiansen <zhangxiansen@itclou…   0B        buildkit.dockerfile.v0
<missing>      22 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      22 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      22 months ago   /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     
[root@localhost dockerfile-test]# 
最后修改:2023 年 07 月 21 日
如果觉得我的文章对你有用,请随意赞赏