【Docker】Docker 实践(三):使用 Dockerfile 文件构建镜像

Docker 实践(三):使用 Dockerfile 文件构建镜像

  • [1.使用 Dockerfile 文件构建镜像](#1.使用 Dockerfile 文件构建镜像)
  • [2.Dockerfile 文件详解](#2.Dockerfile 文件详解)

1.使用 Dockerfile 文件构建镜像

Dockerfile 是一个文本文件,其中包含了一条条的指令,每一条指令都用于构建镜像中的一层。

Dockerfile 文件可以使用 docker build 命令进行编译。在编译过程中,每一条指令的内容描述了该层应如何进行构建。当我们需要指定自己额外的需求时,只需在 Dockerfile 文件的基础上添加或者修改指令,重新生成新的镜像即可。

下面通过一个简单的示例来演示如何使用 Dockerfile 文件。在这个示例中,将基于 Nginx 的镜像来构建一个新的镜像,并在该镜像中部署一个简单的 Web 网页。

  • 创建一个 Dockerfile 文件。在该文件中输入以下命令。
bash 复制代码
FROM nginx
RUN echo '<h1>This is a Demo HTML</h1>' > /usr/share/nginx/html/index.html
  • 在 Dockerfile 文件所在目录下执行 docker build 命令构建镜像。
bash 复制代码
docker build -t mynginx .

docker build 命令会在当前目录下寻找名为 Dockerfile 的文件,然后对该文件进行编译生成镜像。如果文件名不是 Dockerfile,则可以在使用 docker build 命令加上 -f 参数指定具体的文件名称。

  • 查看新生成的镜像。
  • 使用新生成的镜像创建容器。
bash 复制代码
docker run -d -p 7788:80 mynginx
  • 使用浏览器访问宿主机的 7788 端口,界面如下所示。

2.Dockerfile 文件详解

下表描述了一个完整的 Dockerfile 文件的组成部分。

组成部分 说明
基础镜像信息 使用 FROM 关键字指定基础镜像信息,该命令必须是 Dockerfile 文件的第 1 条指令
维护者信息 使用 MAINTAINER 关键字指定,通常可以使用 Dockerfile 文件创建者的姓名或者电子邮件作为维护者的信息
镜像操作指令 每执行一条镜像操作时令,将在镜像中添加新的一层。可以根据需要使用一条或者多条镜像操作指令。常见的镜像操作指令有:RUNCOPYADDEXPOSEWORKDIRONBUILDUSERVOLUME
容器启动或执行指令 用于指定在启动容器时需要执行的命令。通过关键字 CMDENTERPOINT 指定

docker build 命令在使用 Dockerfile 文件生成镜像时,会通过 Docker 守护进程执行 Dockerfile 文件中的每一条指令,并在每一步执行完成后生成一个镜像。当所有的指令执行完成后,会输出最终镜像的 ID。

当镜像最终生成后,Docker 守护进程会自动清理 Docker 的上下文环境,并自动重用已生成的中间镜像,以加快构建的速度。下图的方框部分表明,在构建过程中使用到了 Dockerfile 文件的缓存机制。

相关推荐
Hi2024021712 分钟前
在Docker容器中安全运行OpenClaw:无需虚拟机,体验AI助手
人工智能·安全·docker·openclaw
江湖有缘17 分钟前
Docker部署music-tag-web音乐标签编辑器
前端·docker·编辑器
计算机小手18 分钟前
Docker 部署 OpenClaw 汉化版,畅玩个人 AI 智能代理
经验分享·docker·aigc·开源软件
金刚猿10 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong10 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿11 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
陈桴浮海12 小时前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
70asunflower14 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
ShiLiu_mtx15 小时前
k8s - 7
云原生·容器·kubernetes
春日见15 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设