Docker构建镜像

238 阅读2分钟

很多情况下我们是需要自己的镜像,满足自己业务需要的镜像,这就需要我们能够定制自己需要的镜像,构建 Docker 镜像有以下两种方法。

  • 使用 docker commit 命令。
  • 使用 docker build 命令和 Dockerfile 构建文件。

1.1使用 docker commit 命令。

docker commit 命令是创建新镜像最直观的方法,其过程包含三个步骤:

  • 运行容器;
  • 修改容器;
  • 将容器保存为新的镜像。

先从创建一个新容器开始,这个容器我们就使用很常见的 ubuntu 镜像,操作步骤如下

 运行一个要进行修改的容器

1
2
root@ubuntu:~# docker run -ti ubuntu /bin/bash
root@733a4b080491:/#

 安装 Apache 软件包


1
2
3
4
root@733a4b080491:/# apt-get update
... ...
root@733a4b080491:/# apt-get install -y apache2
... ...

我们启动了一个容器,并在里面安装了 Apache 。我们将会拿这个容器作为一个 Web 服务器来运行,我们需要把它保存下来,这样就不用每次都运行这个步骤了。

1.3 提交定制容器

1
2
3
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
733a4b080491 ubuntu "/bin/bash" 11 minutes ago Exited (0) 5 seconds ago suspicious_mestorf
1
2
root@ubuntu:~# docker commit 733a4b080491 wzlinux/ubuntu_with_apache
sha256:902ac2c87147fefc5b70c741ce9550dcda426cea9f824f442d5cc2744bdc90ae
1
2
3
4
root@ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wzlinux/ubuntu_with_apache latest 902ac2c87147 33 seconds ago 261MB
ubuntu latest 20c44cd7596f 10 days ago 123MB

可以看到,我们使用 docker commit 提交了修改过的容器,从 size 上可以看到镜像因为安装软件由123MB->261MB,docker commit 提交的只是创建容器的镜像与容器的当前状态之间有差异的部分,这使得该更新非常轻量。

这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。比如要在 debian base 镜像中也加入 apache,还得重复前面的所有步骤。使用 Dockerfile 方法来代替 docker commit,因为通过前者构建镜像更具备可重复性、透明性以及幂等性。即便是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 能够帮助我们更加深入地理解构建过程和镜像的分层结构。