学习 Docker – (3) 构建镜像

第四节:构建你自己的镜像

https://docs.docker.com/linux/step_four/

这个 whalesay 镜像是可以改进的,如果你不需要去想需要说些什么,它将很棒(自动说些什么东西?)然后你写了很多东西让 whalesay 来说话。

docker run ducker/whalesay cowsay boo-boo

在这个章节里面,你会改进 whalesay 镜像,通过构建一个新的版本,让他自己说话,然后用更少的命令就可以运行。

第一步:创建一个 Dockerfile

在这一步里面,你用你喜好的编辑器(Vim)来写一个简短的 Dockerfile,一个 Dockerfile 描述了“烧录”到镜像里面的软件。然而这并不是软件的构成,它可以告诉软件使用什么环境和运行什么命令。你的处方会变得非常简短。

1. 返回到终端窗口
2. 创建一个新的目录,输入 mkdir mydockerbuild 然后回车
$ mkdir mydockerbuild
3. 进入你新的目录
$ cd mydockerbuild

现在目录是空的。

4. 创建一个名为 Dockerfile 的文件

你可以使用任意的文本编辑器(我发现这个教程的废话不是一般的多)

5. 打开你的 Dockerfile 文件
6. 在文件里面加入这行:
FROM docker/whalesay:latest

这个 FROM 关键词告诉 Docker 你的镜像是基于哪一个镜像的。Whalesay 是很可爱的,而且已经有了 cowsay 程序,所以我们从这里来开始。

7. 现在添加 fortunes 程序到镜像中
RUN apt-get -y update && apt-get install -y fortunes

这个 fortunes 程序有一个命令,会打印出一些智能的内容让鲸鱼说话。所以,第一步就是要安装它。这一行会将软件安装进镜像中。

8. 一旦镜像已经具有了所需要的软件,你命令软件当镜像加载的时候运行
CMD /usr/games/fortune -a | cowsay

这一行告诉 fortune 程序传输一句俏皮话给 cowsay 程序。

9. 检查你的工作,你的文件应该看起来像这样
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
10. 保存并关闭你的 Dockerfile

这时候,你已经具备了软件组件然后通过 Dockerfile 描述了它的行为。你已经准备好创建一个新的镜像了。

译注:其实 cowsay 是一个独立的 apt 库,直接调用 cowsay hello 就可以执行像前面小鲸鱼说话的效果,不过说话的是牛。可以自己试一试在当前操作系统环境里面使用 cowsayfortune

第二步:通过你的 Dockerfile 构建一个镜像

1. 现在,通过在终端输入 docker build -t docker-whale . 来构建你的新的镜像(别漏掉 .
# docker build -t docker-whale .
Sending build context to Docker daemon 158.8 MB
...snip...
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763

这个命令会花数秒时间运行然后报告它的输出,在你对新的镜像做任何事情之前,话一些时间学习 Dockerfile 的构建过程。

第三步:学习关于构建过程

这个 docker build -t docker-whale . 命令获取当期目录里面的 Dockerfile,然后在你的本地机器上面构建了一个叫做 docker-whale 的镜像。这个命令大概花一分钟的时间,它的输出略显冗长复杂。在下一个章节,你会知道这些东西是什么意思。

首先,Docker 检查构建所需的东西是否已经具备:

Sending build context to Docker daemon 158.8MB

然后,Docker 载入 whalesay 镜像。如果你上一个页面已经做过相应的动作,这里本地就应该有这个镜像。因此,Docker 并不需要下载它。

Step 0 : FROM docker/whalesay:latest
 ---> fb434121fc77

Docker 进入下一步,更新 apt-get 管理器。这一步占了很多航,没有必要在这里将它们全部列举出来。

Step 1 : RUN apt-get -y update && apt-get install -y fortunes
 ---> Running in 27d224dfa5b2
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Hit http://archive.ubuntu.com trusty Release.gpg
....snip...
Get:15 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [14.8 kB]
Get:16 http://archive.ubuntu.com trusty-security/universe amd64 Packages [134 kB]
Reading package lists...
---> eb06e47a01d2

然后,Docker 安装这个新的 fortunes 软件。

Removing intermediate container e2a84b5f390f
Step 2 : RUN apt-get install -y fortunes
 ---> Running in 23aa52c1897c
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  fortune-mod fortunes-min librecode0
Suggested packages:
  x11-utils bsdmainutils
The following NEW packages will be installed:
  fortune-mod fortunes fortunes-min librecode0
0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
Need to get 1961 kB of archives.
After this operation, 4817 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main librecode0 amd64 3.6-21 [771 kB]
...snip......
Setting up fortunes (1:1.99.1-7) ...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
 ---> c81071adeeb5
Removing intermediate container 23aa52c1897c

最终,Docker 完成了构建,然后报告它的输出:

Step 3 : CMD /usr/games/fortune -a | cowsay
 ---> Running in a8e6faa88df3
 ---> 7d9495d03763
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763

第四步:运行你的新的 docker-whale

在这一步里面,你要验证你的机器中新的镜像然后运行它。

1. 光标放到命令行提示符上面
2. 输入 docker images 然后回车

这个命令你可能还记得,将列举你本地的所有镜像:

$ docker images
REPOSITORY           TAG          IMAGE ID          CREATED             VIRTUAL SIZE
docker-whale         latest       7d9495d03763      4 minutes ago       273.7 MB
docker/whalesay      latest       fb434121fc77      4 hours ago         247 MB
hello-world          latest       91c95931e552      5 weeks ago         910 B
3. 通过 docker run docker-whale 回车,来运行你的新的镜像。
$ docker run docker-whale
 _________________________________________
/ "He was a modest, good-humored boy. It  \
\ was Oxford that made him insufferable." /
 -----------------------------------------
          \
           \
            \     
                          ##        .            
                    ## ## ##       ==            
                 ## ## ## ##      ===            
             /""""""""""""""""___/ ===        
        ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
             \______ o          __/            
              \    \        __/             
                \____\______/   

如你所见,你已经让小鲸鱼聪明多了。它自己想到台词,所以命令缩短了!你也要注意到 Docker 不需要下载任何东西,这是因为镜像已经在本地构建并且已经可用了。

这一章你学习到如何构建一个镜像,通过书写你自己的 Dockerfile,你在容器中运行你的镜像。下面要通过创建 Docker Hub 的账号来分享你的镜像。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2016/01/learn-docker-3.html【学习 Docker – (3) 构建镜像】

《学习 Docker – (3) 构建镜像》有2个想法

  1. 系统是centOS7. pull “docker/whalesay” 到本地的镜像, 创建Dockerfile 时候烧制 “RUN apt-get install -y fortun”是否应写成 “RUN yum install -y fortun” ?

    Dockerfile 写成 apt-get or yum xxx,是根据镜像的系统还是当前的系统环境来决定的 ?

发表评论

电子邮件地址不会被公开。 必填项已用*标注