原文地址: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
[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
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021