对于 Docker 用户来讲,最好的状况是不须要本身建立镜像。几乎全部经常使用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其余人和组织建立的镜像,咱们只须要稍做配置就能够直接使用。docker
使用现成镜像的好处除了省去本身作镜像的工做量外,更重要的是能够利用前人的经验。特别是使用那些官方镜像,由于 Docker 的工程师知道如何更好的在容器中运行软件。数据库
固然,某些状况下咱们也不得不本身构建镜像,好比:ubuntu
找不到现成的镜像,好比本身开发的应用程序。安全
须要在镜像中加入特定的功能,好比官方镜像几乎都不提供 ssh。ssh
因此本节咱们将介绍构建镜像的方法。同时分析构建的过程也可以加深咱们对前面镜像分层结构的理解。学习
Docker 提供了两种构建镜像的方法:code
docker commit 命令中间件
Dockerfile 构建文件开发
docker commitit
docker commit 命令是建立新镜像最直观的方法,其过程包含三个步骤:
运行容器
修改容器
将容器保存为新的镜像
举个例子:在 ubuntu base 镜像中安装 vi 并保存为新镜像。
第一步, 运行容器
-it
参数的做用是以交互模式进入容器,并打开终端。412b30588f4a
是容器的内部 ID。
安装 vi
确认 vi 没有安装。
安装 vi。
保存为新镜像
在新窗口中查看当前运行的容器。
silly_goldberg
是 Docker 为咱们的容器随机分配的名字。
执行 docker commit 命令将容器保存为镜像。
新镜像命名为 ubuntu-with-vi
。
查看新镜像的属性。
从 size 上看到镜像由于安装了软件而变大了。
重新镜像启动容器,验证 vi 已经能够使用。
以上演示了如何用 docker commit 建立新镜像。然而,Docker 并不建议用户经过这种方式构建镜像。缘由以下:
这是一种手工建立镜像的方式,容易出错,效率低且可重复性弱。好比要在 debian base 镜像中也加入 vi,还得重复前面的全部步骤。
更重要的:使用者并不知道镜像是如何建立出来的,里面是否有恶意程序。也就是说没法对镜像进行审计,存在安全隐患。
既然 docker commit 不是推荐的方法,咱们干吗还要花时间学习呢?
缘由是:即使是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 可以帮助咱们更加深刻地理解构建过程和镜像的分层结构。
下一节咱们学习如何经过 Dockerfile 构建镜像。