Docker镜像包的制作

我们知道,要创建一个Docker容器,要先有Docker镜像,Docker镜像怎么创建的呢,一般有两种创建方式: 
1. 根据基础镜像,生成新镜像 
2. 使用Dockerfile生成镜像

在制作镜像之前,先看下怎么查找镜像

列出所有在主机上的镜像 
docker images列出所有镜像 

我主机上有两个镜像centos和ubuntu,我们在镜像列表中看到三个至关重要的东西。 
- 镜像源,例如 ubuntu 
- 镜像的标签(tags),例如 latest 
- 镜像ID,每个镜像都有镜像ID

从DockerHub中查找镜像 
DockerHub是远程镜像仓库,保存种各样的镜像,可以从DockerHub官网上搜索你想要的镜像 


也可以在本机使用docker search 查找 DockerHub上的镜像 


知道镜像的查找方式后,下来我们开始制作镜像

1. 根据基础镜像,生成新镜像
这种方式首先需要有一个基础镜像,可以通过docker pull命令,从DockerHub中先下载一个镜像,作为我们的基础镜像 


下载时,如果没有指定tag,默认latest,使用docker images查看发现centos镜像已经下载下来了 


下面开始基于镜像运行一个容器,修改容器内容,重新Commit生成新镜像 


这里容器ID(9dc737402a4d)已经生成,并已进入到容器中,在运行的容器内创建一个text.txt的文件,然后exit退出容器 


使用docker commit生成新镜像 

这里我们指定了两个标识(flags) -m 和 -a 。-m 标识我们指定提交的信息,就像你提交一个版本控制。-a 标识允许对我们的更新来指定一个作者,最后用docker images查看镜像发现新镜像已经生成了

验证: 
运行新镜像生成容器,到容器中查看是否存在刚才创建的text.txt文件 

经验证后发现,在新生成的容器中,存在有刚创建的text.txt文件,说明新镜像已经生效

2. 使用Dockerfile生成镜像
使用 docker commit 命令能够能快速的创建一个新镜像,但是有点麻烦,并且在一个团队中也不能够轻易的共享它的开发过程。因此我们使用一个新的命令 docker build , 从零开始来创建一个新的镜像。我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

现在创建一个 Dockerfile,内容如下:

# This is a comment
FROM ubuntu:latest
MAINTAINER longwentao <[email protected]>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra


第一个指令 FROM 是告诉 Docker 使用的哪个镜像源,这里我们使用的是 Ubuntu:latest 基础镜像。

下一步,我们使用 MAINTAINER 指令来指定谁在维护这个新镜像。

最后,我们指定了两个 RUN 指令。 RUN 指令在镜像内执行一条命令,例如:安装一个包。这里我们更新了 APT 的缓存,并且安装 Ruby 和 RubyGems ,然后使用 gem 安装 Sinatra镜像

现在,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像 

我们使用 docker build 命令并指定 -t 标识(flag)来标示属于 longwentao,镜像名称为 sinatra,标签是 v2。

如果 Dockerfile 在我们当前目录下,我们可以使用 . 来指定 Dockerfile

我们可以看到构建过程,Docker 做的第一件事是通过上下文进行构建,基本上是目录的内容构建。这样做是因为 Docker 进程构建镜像是实时构建的,并且是需要本地的上下文来做这些工作的。(这里上下文是指Context)

下一步,Dockerfile 中的每一条命令都一步一步的被执行。我们会看到每一步都会创建一个新的容器,在容器内部运行指令并且提交更改,就像docker commit 一样。当所有的指令执行完成之后,我们会得到97feabe5d2ed 镜像,然后所有中间容器会被清除。

猜你喜欢

转载自blog.csdn.net/u012843873/article/details/83510553