Docker容器作为部署和管理云原生分布式系统的最佳实践正在兴起。 容器是Docker映像的实例。 事实证明,关于图像有很多知识。
在这个分为两部分的教程中,我将深入介绍Docker映像。 在第一部分中,我讨论了基本原理,设计注意事项和图像内部检查。 在这一部分中,我将介绍构建自己的映像,进行故障排除以及使用映像存储库。
另一方面,您将对Docker镜像到底是什么以及如何在自己的应用程序和系统中有效利用它们有了深刻的了解。
建筑图片
有两种生成映像的方法。 您可以修改现有容器,然后将其提交为新映像,或者可以编写Dockerfile并将其构建为映像。 我们将仔细研究两者,并说明其优缺点。
手动构建
通过手动构建,您可以像对待普通计算机一样对待容器。 安装软件包,编写文件,完成所有工作后,提交并最终得到一个新映像,该映像用作模板来创建更多相同的容器甚至基于其他映像。
让我们从alpine映像开始,它是基于Alpine Linux的非常小的斯巴达式映像。 我们可以以交互方式运行它以进入外壳。 我们的目标是添加一个名为“ yeah”的文件,其中包含文本“ it works!”。 到根目录,然后从中创建一个名为“ yeah-alpine”的新映像。
开始了。 好的,我们已经在根目录下了。 让我们看看那里有什么。
> docker run -it alpine /bin/sh
/ # ls
bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var
有什么可用的编辑器? 没有vim,没有纳米?
/ # vim
/bin/sh: vim: not found
/ # nano
/bin/sh: nano: not found
那好吧。 我们只想创建一个文件:
/ # echo "it works!" > yeah
/ # cat yeah
it works!
我从交互式外壳退出,可以看到带有docker docker ps --all
名为“ vibrant_spenc”的容器。 --all
标志很重要,因为容器不再运行。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
c8faeb05de5f alpine "/bin/sh" 6 minutes ago Exited vibrant_spence
在这里,我从“ vibrate_spence”容器创建一个新图像。 我添加了提交消息“地雷,地雷,地雷”。
> docker commit -m "mine, mine, mine" vibrant_spence yeah-alpine
sha256:e3c98cd21f4d85a1428...e220da99995fd8bf6b49aa
让我们来看看。 是的,有一个新图像,在它的历史中,您可以看到带有“地雷,地雷,地雷”注释的新图层。