Docker-从零开始二(构建自己的Docker镜像)

在我的第一篇帖子中已经完成了Docker环境的部署及拉取第一个镜像Hello-World。本篇文章将向大家介绍如何构建自己的镜像。

一、工具准备

首先,需要准备必要的工具,方便起见,使用alpine的文件系统,可以从alpine的官网下载或者拉取。

地址:https://www.alpinelinux.org/downloads/

下载Mini root filesystem,解压到目标目录,使用命令tar xf  minirootfs.tar.gz -C filename

二、编写Dockerfile

编写Dockerfile,本文的Dockerfile可做参考

FROM scratch

ADD rootfs /

WORKDIR /bin

CMD ["/bin/sh"]

首先第一行命令:FROM scratch表示从空构建docker,因此,也可以从指定版本构建docker,此时写成(同样以alpine为例,当然也可以是ubuntu等其他版本的镜像)

FROM alpine:latest

这表示从alpine最新版本docker来构建,latest可以换成仓库中存在的任意版本

第二行命令:ADD rootfs /表示添加解压后的根文件系统到docker的根目录中。这里要注意的是,github或一些帖子中建议使用

ADD filename.tar /

命令来构建,但是作者用该方法多次构建都没有成功,我想可能docker和主机的内核版本不兼容导致哈希码的编解码过程出现问题;而且,ADD命令添加一个压缩文件去构建docker,本身存在一个解压文件和打包成layer.tar的过程,我人文内核版本不兼容可能会在这一过程出现问题;具体原因分析我将在之后分析docker源码时写出作者本人的理解。ADD命令的解包过程也是和COPY命令的一个区分。

第三条命令:WORKDIR /bin表示进入docker的工作目录

第四条命令:CMD ["/bin/sh"]表示docker启动容器时要执行的命令,如果在docker run 一个镜像的时候在命令末尾添加其他的命令,那么将会覆盖Dockerfile中的CMD。如果主机只部署了containerd,而没有部署docker的条件,那CMD就成为必须添加的命令;目前使用containerd的ctr指令并未发现有添加命令的操作,不过读者可以通过socket与container建立通信,直接运行镜像中的应用。

三、构建结果

OK,经过上面的过程,相信读者已经构建出自己的镜像了,可以看到以下结果:

Docker-从零开始二(构建自己的Docker镜像)_第1张图片

这里先用sudo docker build -t alpine:v1 .命令构建,在跨平台构建时再讲述buildx构建指定平台的镜像。

执行命令sudo docker run -it -v test:/soft alpine:v1

OK,已经进入了docker中,并且在Dockerfile所指定的工作目录。

————————————————————————————————————————————————————————

谢谢观看,祝各位工作顺利,生活愉快!

你可能感兴趣的:(Docker)