您的位置:首页 > 运维架构 > Docker

初识Docker:构建自己的镜像

2016-11-24 00:00 260 查看

构建自己的镜像

whalesay镜像可以做到的更好, 尤其是当你不知道自己想要说什么的时候. 你可以输入更多的命令来让它发声
docker run docker/whalesay cowsay boo-boo
在接下来,我们将会改进whalesay,构建一个新版本的镜像让他可以“自由说话”

Step1:编写一个Dockerfile文件

在这一步,用你喜欢的编辑器写一个简单的Dockerfile文件,一个Dockerfile文件描述了“刻录(baked)”到镜像里去的软件信息,还有,文件还会告诉软件使用什么样的环境或者运行什么样的命令。我们要写的文件信息将会很简短。

进入命令行窗口

创建一个新目录mydockerbuild来存放要写的Dockerfile

$ mkdir mydockerbuild


这个目录就是你等会构建镜像的“上下文”,意味着你构建用的的东西都包含在这里


进入到mydockerbuild目录

$ cd mydockerbuild


目录目前为空

创建Dockerfile

$ touch Dockerfile


打开Dockerfile,用可视化编辑器或vi都行

向文件里添加一行

FROM docker/whalesay:latest


FROM关键字的意思是指我们要基于哪个镜像来构建,这里我们基于之前的whalesay来构建

现在将fortunes软件添加到镜像

RUN apt-get -y update && apt-get install -y fortunes


fortunes软件有个命令可以打印出说谚语的小鲸鱼,那我们第一步就安装它。这条指令就是将fortunes安装到镜像里去

有了需要的软件,通知软件在镜像加载的时候运行

CMD /usr/games/fortune -a | cowsay


这条指令是告诉fortunes软件传一个谚语到cowsay软件

检查你的文件,应该和下面一样:

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes

CMD /usr/games/fortune -a | cowsay


保存退出编辑

Step2:使用Dockerfile构建镜像

进入到Dockerfile所在的目录

使用
docker build -t docker-whale .
命令构建(不要忘了后面的
.




$ docker build -t docker-whale .
Sending build context to Docker daemon 2.048 kB
...snip...
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763

该命令将会花费几秒的时间,打印出构建信息(由于篇幅省略部分,下文会描述详细信息)。在你使用这个镜像之前,先花点时间来了解下Dockerfile的构建过程是怎样的。

## Step3:学习构建过程

命令`docker build -t docker-whale .`会找到当前目录下的Dockerfile文件,并且在你本地构建一个名叫`docker-whale`的镜像。过程会花费些时间并打印出看上去很长很复杂的信息。接下来,你将学习每一条信息的含义。

首先Docker会检查确保它拥有构建所需的全部东西,发送到Docker引擎

Sending build context to Docker daemon 2.048 kB

然后,Docker加载whalesay镜像。因为whalesay镜像本地已经存在了,就不会去重新下载

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

下一步是去更新`apt-get`包。有很多行,没必要全部显示在这

Step 2 : 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

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 bsdmainutilsThe following
NEW packages will be installed:
fortune-mod fortunes fortunes-min librecode00 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

## Step4:运行你新构建的`docker-whale`

在这一步,我们要验证新的镜像已经存在本地,然后运行起来

1. 进入命令行,输入`docker images`命令按回车
这条命令就是显示本地存在的镜像

$ docker images
REPOSITORY TAG IMAGE ID CREATED 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

2. 输入命令` docker run docker-whale `运行新的镜像
![输入图片说明](https://static.oschina.net/uploads/img/201611/24194852_SUxU.jpg "在这里输入图片标题")

你看,现在这条小鲸鱼聪明多了。我们输入命令比以前短了,小鲸鱼会自己找话说!你可能注意到Docker没有去下载任何东西,那是因为我们构建的镜像已经是在本地了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Docker 构建镜像