docker - 构建一个简单的docker镜像

    docker构建镜像的方式有两种,一种是通过 docker commit 命令构建,另一种是通过 Dockerfile 构建文件构建。下面分别通过两种方式介绍这两种构建方式。

    接下来,我们会分别采用上述的两种方式构建带有vim命令的centos镜像。

1、环境准备

    我们先查看下当前的环境。在本地docker仓库中现在有一个centos 7.4.1708 的镜像,如果没有请先拉取。

12b574f097e5a5fc5c74fc432d9c310f32a.jpg

    现在以交互的方式运行该centos7镜像

docker run -it centos:7.4.1708

     -it 参数

    这个参数是以交互方式运行centos镜像的意思,也就是我们进入到该centos7的容器中(也就是该用户空间中),这里需要注意一点的是,我们的容器是运行在宿主主机上的,也就是说容器的运行内核是宿主主机的内核(bootfs)。这里,如果我们在centos镜像中运行 uname 命令,这里显示的是docker宿主主机的内核版本号。

    接下来,我们以交互方式运行下centos容器的vim命令,结果base image是没有预装vim命令的。

    f9e05d4e6ebbb55baba49bf2d6d5f52324e.jpg

    我们看到,在命令行的左边,出现了一个 74c83be9fd78 ,这个是在docker engine运行的容器ID,我们在宿主主机上可以通过命令,查看当前在docker引擎中运行的所有容器。

docker ps

4dfb465ef301de6ebf424a0c6378eed30b6.jpg

下方的就是我们运行中的centos容器了。

2、docker commit方式构建镜像

这种方式构建装有vim命令的新的centos镜像需要完成以下三个步骤:

(1)运行容器。前面已经启动了centos容器

(2)修改容器,需要在运行的容器中安装vim命令

(3)将修改后的容器保存为新的镜像

2.1 修改容器

    通过交互模式进入需要新修改的centos7容器,运行yum命令安装vim命令

yum install -y vim

    安装后,重新运行vim检查是否安装成功。

2.2 保存修改后的容器为新的镜像

在新窗口中查看当前运行的容器

b8e415cdaaefe004c6bb5729fd58c17eaf8.jpg

执行commit命令将容器保存为新的镜像,050704f7c569 是运行的容器的ID,centos7-vim-by-commit是新镜像的名字,1.0.0是版本号

docker commit 050704f7c569 centos7-vim-by-commit:1.0.0

commit成功 后,查看下当前仓库中的docker镜像,多了一个centos7-vim-by-commit,tag是1.0.0的镜像

4f4be929fa2682a315aa068f476e2c2cd72.jpg

我们运行该镜像

docker run -it centos7-vim-by-commit:1.0.0

发现vim命令是可以运行的。

3. 通过 Dockerfile 构建镜像

除了可以用commit方式构建镜像,我们还可以用 Dockerfile(推荐方法)构建镜像。

首先,我们在/root中创建一个目录 first-dockerfile , 该目录作为我们构建镜像的build context

[root@localhost first-dockerfile]# pwd
/root/first-dockerfile

我们在该目录下创建一个名字为Dockerfile的文件,该文件是docker构建镜像的脚本

FROM centos:7.4.1708
RUN yum install -y vim
  • 第一行的意思是用centos的7.4.1708版本作为我们构建镜像的base image
  • 第二行在上面的base image的基础上,安装vim命令程序

准备就绪后,在first-dockerfile目录下运行,开始构建新的镜像

docker build -t centos7-vim-by-dockerfile:1.0.0 .

    build命令,-t参数将新镜像命名为centos7-vim-by-dockerfile,tag是1.0.0。命令最后的 . ,指明当前目录为build context,默认情况下从build context中查找Dockerfile文件

    执行build命令后,开始执行构建过程

[root@localhost first-dockerfile]# docker build -t centos7-vim-by-dockerfile:1.0.0 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7.4.1708
 ---> 295a0b2bd8ea
Step 2/2 : RUN yum install -y vim
 ---> Running in 121ba3c1492c

............ 省略安装过程

Complete!
Removing intermediate container 121ba3c1492c
 ---> 6148376c2a1f
Successfully built 6148376c2a1f
Successfully tagged centos7-vim-by-dockerfile:1.0.0
  • Step1。获取centos镜像,由于本地已经存在该镜像,所有base image来源于ID为295a0b2bd8ea的镜像
  • Step2。运行 yum install -y vim 命令。首先,启动临时容器,ID为121ba3c1492c,在该容器中安装VIM,接下来打包新的镜像,镜像ID为6148376c2a1f,然后删除临时容器。新的镜像tag为centos7-vim-by-dockerfile:1.0.0

我们可以通过查看本地镜像和镜像分层的方式验证。

查看本地镜像

[root@localhost first-dockerfile]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
centos7-vim-by-dockerfile   1.0.0               6148376c2a1f        24 minutes ago      350MB
centos7-vim-by-commit       1.0.0               bda9b5d82a72        2 days ago          350MB
centos                      7.4.1708            295a0b2bd8ea        4 weeks ago         197MB
hello-world                 latest              4ab4c602aa5e        2 months ago        1.84kB

查看镜像分层

[root@localhost first-dockerfile]# docker history 6148376c2a1f
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
6148376c2a1f        36 minutes ago      /bin/sh -c yum install -y vim                   153MB               
295a0b2bd8ea        4 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           4 weeks ago         /bin/sh -c #(nop)  LABEL name=CentOS Base Im…   0B                  
<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:d6a1da927f0b7a710…   197MB  

docker history命令会显示镜像的构建历史。

 

 

 

转载于:https://my.oschina.net/thinwonton/blog/2874587

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值