创建你自己的镜像
whalesay
镜像可以稍作改善。如果你不是必须要想一些说的就太棒了。你现在必须要输入一些话来让whalesay
来说话。
docker run docker/whalesay cowsay boo-boo
在这一节中,你将通过构建一个能“自己说话”而只需要更少的命令就能运行的新版本来改善whalesay的镜像。
第一步:写一个Dockerfile
在这一步中,你可以使用你喜欢的文本编辑器来写一个简短的Dockerfile。Dockerfile描述了“烘培”到镜像中的软件。然而它又不只是成分表,它能告诉软件使用什么环境或运行什么命令。你的配方必须变得非常简短:
- 回到终端窗口。
- 通过输入 mkdir mydockerbuild 并按下回车新建一个文件夹
这个文件夹在你的构件中扮演着“上下文”的角色。上下文只是意味着它包含了所有你构建镜像需要的东西。$ mkdir mydockerbuild
- 切换到你新文件夹。
现在这个文件夹是空的。$ cd mydockerbuild
- 在你现在的文件夹中新建一个叫做
Dockerfile
的文件。
你可以使用任何的文本编辑器比如vi或nano。 - 打开你的Dockerfile文件。
- 往文件中添加一个包含以下文本的新行:
FROM 关键词告Docker你的镜像是基于哪一个镜像构建的。Whalesay够有趣并且它已经包含cowsay程序,所以我们从那里开始。FROM docker/whalesay:latest
- 现在往你的镜像中添加
fortunes
程序。RUN apt-get -y update && apt-get install -y fortunes
fortunes
程序有一个命令可以打印出有智慧的话让我们的鲸来讲。所以,第一步是先安装它。这一行把软件安装到了镜像中。 - 一旦镜像拥有了它需要的软件,你就可以指示软件在镜像载入的时候运行。
这一行告诉CMD /usr/games/fortune -a | cowsay
fortune
程序传递一句俏皮的引述给cowsay
程序。 - 检查你的工作,你的文件应该看起来像这样:
FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune -a | cowsay
- 保存并关闭你的Dockerfile.
这时,你在你的Dockerfile中写下了所有的软件成分和行为描述。你已经准备好构建一个新的镜像了。
第二步:用你的Dockerfile构建一个镜像
- 现在,在你的终端输入
docker build -t docker-whale .
(不要忽略了最后面有一个“.”)
这个命令用了几秒钟运行并输出它的结果。在你对新的镜像做任何操作之前,先花一点时间了解一下Dockerfile构建的流程。$ docker build -t docker-whale . Sending build context to Docker daemon 158.8 MB ...snip... Removing intermediate container a8e6faa88df3 Successfully built 7d9495d03763
第三步:了解构建的流程
docker build -t docker-whale .
这条命令使用当前文件夹下的Dockerfile
文件,并在本地构建了docker-whale
镜像。这条命令花了大概一分钟并且它的输出看起来确实又长又复杂。在这一节,你会了解每一条消息意味着什么。
首先,Docker会检查以确认所有构建所需的东西都已经就绪。
Sending build context to Docker daemon 158.8 MB
然后,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
在这一步中,你会验证新的镜像已经在你的电脑上了,然后运行新的镜像。
- 如果你不在命令行窗口的话,把你的光标移动到命令行窗口上。
- 输入
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
- 输入
docker run docker-whale
并按下回车运行新的镜像。
就像你看到的这样,你已经让鲸鱼更加聪明。它自己也会说话并且命令更短!你或许也注意到了Docker并不需要下载任何东西。那是因为镜像已经在本地构建了并可直接获取。$ docker run docker-whale _________________________________________ / "He was a modest, good-humored boy. It \ \ was Oxford that made him insufferable." / ----------------------------------------- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/
下一步是什么
在这一中,你学习了通过写你自己的Dockerfile构建一个新的镜像。你在容器中运行你的新镜像。在下一节中,你会开始分享你的镜像的第一步:创建一个Docker Hub账号。