首页 » 翻译 » Docker » 正文

Docker 入门教程04 从镜像开始(image)第四部分

原文地址:https://docs.docker.com/userguide/dockerimages/

使用Dockerfile来创建新的镜像

使用docker commit命令是十分简单的方法来扩展现有的镜像,但是这个方法有点笨重,而且不容易和其他人分享镜像的创建过程,作为替代,我们可以使用docker build 来创建新的镜像

要使用docker build 命令,我们需要创建 Dockerfile,Dockerfile中包含了一系列的指令来告诉docker该如何创建我们的镜像

让创建一个目录和一个Dockerfile

#mkdir sinatra

#cd sinatra

#touch Dockerfile

Dockerfile中每一个指令都创建镜像的一层,我们看一个简单的例子来创建我们自己的sinatra镜像


# this is a comment
FROM ubuntu:14.04
MAINTAINER Zhiming Zhang <735031613@qq.com>
RUN apt-get update&& apt-get install -y ruby ruby-dev
RUN gem install sinatra

好,我们逐行来解释一下每条命令的含义

首先,每一行的第一个单词都是大写的
第一行 FROM 告诉docker 镜像的源镜像是什么,在本例子中,我们使用的是ubuntu:14.04

第二行 我们使用 MAINTAINER 来说明谁维护这个镜像 本例子中为 Zhiming Zhang (我) 邮箱是 735031613@qq.com

然后,我们执行了2个RUN 命令,其实就是在我们的镜像中执行命令,本例子中是我们执行了更新,安装ruby ,ruby-dev ,然后我们安装了 sinatra

然后我们要做的就是使用docker build 来调用我们的dockerfile来创建一个镜像了

docker build -t zhizhang/sinatra:v2 .

(最后的. 是当前目录的意思)

-t 是指定我们的镜像名称及版本

现在我们就可以看到已经在一步一步的创建了,Docker做的第一件事情就是上传创建内容,基本的信息比如你创建的目录,这样做的目的是Docker会真的创建镜像,所以需要这些信息(好像是废话)

我们看到我们写的Dockefile中的命令被逐条执行了,我们可以看到创建container,执行命令,然后执行提交这些修改,和我们使用docker commit 命令类似,然后,一个新的镜像就产生了

然后我们就可以使用新的镜像创建我们的容器了

docker run -i -t zhizhang/sinatra:v2 /bin/bash

给镜像设定标签

在新的镜像修改或者创建后,我们可以给镜像添加标签,现在我们来给我们的 zhizhang/sinatra:v2 添加一个标签

docker tag c0da854ec42a zhiming/test:last

其中 c0da854ec42a 为镜像Id

zhiming/test 是用户名和名称

last 是你要修改为的名称,我的原来的是的v1,执行完命令后就变成了last


[root@fedora ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
zhiming/test last c0da854ec42a 2 days ago 188.3 MB
zhiming/test v1 c0da854ec42a 2 days ago 188.3 MB
centos latest 7322fbe74aa5 12 days ago 172.2 MB
ubuntu 14.04 6d4946999d4f 2 weeks ago 188.3 MB
training/webapp latest 02a8815912ca 6 weeks ago 348.7 MB
hello-world latest 91c95931e552 10 weeks ago 910 B
e809f156dc98 13 months ago 274.3 MB
[root@fedora ~]#

镜像摘要

镜像如果使用的是V2或者last的这样的格式,镜像就有一个叫做摘要的标示,只要用于创建这个镜像的内容没变化,那么这个摘要是可以预测的,如果想查看,可以使用如下命令

docker images –digests|head

我们可以使用docker pull来使用 摘要

docker pull zhiming/test@cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf

(原谅博主无知啊,能力有限啊,这个“镜像摘要”地方没看出来啥意思啊,有赐教的留言,不胜感激!)

推送镜像
我们可以把我们创建的镜像上传到Docker Hub ,然后我们就可以分享我们的镜像了(当然也可以不分享,推送到私有即可)

docker push zhiming/test

删除镜像

我们可以通过docker rmi 来删除镜像

docker rmi zhiming/test

发表评论