使用Dockerfile定制镜像

发布时间:2026/7/28 20:14:24
使用Dockerfile定制镜像
镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建操作的命令都写入一个脚本这个脚本就是 Dockerfile。Dockerfile是一个文件其内容包含了一条条的指令每一条指令构建一层因此每条指令的内容就是描述该层应当如何构建。接下来我们以官方nginx镜像为例使用Dockerfile来定制。1、创建目录mkdir mynginxcd mynginx/2、创建文件touch Dockerfile3、编辑文件vim Dockerfile内容为FROM nginxRUN echo ‘h 1Hello, Docker!h 1’ /usr/share/nginx/html/index.html4、保存编辑的文件5、在Docker文件所在目录执行docker build -t nginx:v3 .6、查看镜像docker images7、运行镜像docker run --name mynginx -p 80:80 mynginx:2.08、查看容器docker ps -a9、进入容器docker exec -it mynginx /bin/bash其他制作镜像方式Dockerfile 指令详解FROM 指定基础镜像所谓指定镜像一定是以一个镜像为基础在其上进行定制。基础镜像是必须指定的而FROM就是指定基础镜像因此一个Dockerfile中FROM是必备的指令并且必须是第一条指令。在Docker Hub上有非常多的高质量的官方镜像有可以直接拿来使用的服务类的镜像如nginx、redis、mysql、tomcat等可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。如果没有找到对应服务的镜像官方镜像中还提供了一些更为基础的操作系统镜像如ubuntu、bebian、centos、alpine等这些操作系统的软件库为我们提供了更广阔的扩展空间。FROM scratch除了选择现有镜像外Docker还存在一个特殊镜像名为scratch。这个镜像是虚拟的概念并不实际存在它表示一个空白的镜像。如果你以scratch为基础镜像的话意味着你不以任何镜像为基础接下来所写的指令将作为镜像第一曾开始存在。对于Linux下静态编译的程序来说并不需要有操作系统提供运行时支持所需的一切库都已经在可执行文件里了因此直接FROM scratch会让镜像体积更加小巧。使用go语言开发的应用很多会使用这种方式来制作镜像这也是为什么有人认为Go是特别适合容器微服务架构的语言的原因之一。RUN执行命令RUN指令是用来执行命令行命令的。由于命令行的强大能力RUN指令在定制镜像时是最常用的指令之一。其格式有俩种shell 格式RUN命令RUN echo ‘h 1Hello,Docker!/h 1’ /usr/share/nginx/html/index.htmlexec 格式RUN[“可执行文件”,“参数1”,“参数2”]RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components1RUN make -C /usr/src/redisRUN make -C /usr/src/redis install