2026.2.3 Dockfile创建镜像

1、什么是Docker file

Dockerfile 是一个文本文件,包含了一系列的指令(如 FROMRUNCOPY 等),用于自动化构建 Docker 镜像。它描述了如何从基础镜像开始,逐步添加文件、安装软件、设置环境,最终生成一个可运行的镜像。通过 Dockerfile,可以将应用及其运行环境"代码化",实现镜像的可重复构建和版本控制。

2、操作指令与配置指令

操作指令

在构建镜像过程中执行具体操作,如复制文件、运行命令

ADD

增强版COPY,支持从URL下载文件或自动解压tar包

CMD

提供容器启动时的默认命令(可以被docker run 后的命令覆盖)

COPY

将本地文件或目录复制到镜像的文件系统中

ENV

设置环境变量,在构建和容器运行时均生效

EXPOSE

声明容器运行时监听的端口,仅起文档作用,实际发布需-p

ENTRYPOINT

配置容器启动的主命令,与CMD配合使用可实现固定命令+可变参数

FROM

指定基础镜像,必须是 Dockerfile 的第一条有效指令(除 ARG 外)

WORKDIR

设置后续指令的工作目录(若目录不存在会自动创建)

VOLUME

创建一个挂载点,用于持久化数据或共享目录

配置指令

设置镜像的元数据或运行时行为,如环境变量、端口声明

ARG

定义构建镜像时的参数,定义一个构建时的变量,可以在 docker build 命令中通过 --build-arg 参数动态赋值。该变量仅在构建过程中有效,不会保留在最终镜像中。

HEALTHCHECK

指定容器健康检查的命令,告诉 Docker 如何检测容器是否正常工作(如服务是否响应)。如果健康检查失败,容器状态会变为 unhealthy,便于编排工具(如 Docker Swarm、Kubernetes)自动处理。

LABEL

为镜像添加元数据,以键值对形式保存。可用于记录版本、作者、项目信息等,通过 docker inspect 查看。

ONBUILD

为镜像设置一个"触发器"指令,当该镜像被用作其他 Dockerfile 的基础镜像(FROM)时,触发器指令会在构建子镜像时自动执行。常用于创建基础镜像,让子镜像继承某些构建步骤。

STOPSIGNAL

设置停止容器时发送给主进程的系统调用信号(默认是 SIGTERM)。某些应用可能需要自定义信号(如 SIGQUIT)才能优雅退出。

USER

指定运行后续指令(如 RUNCMDENTRYPOINT)时所使用的用户名或 UID(以及可选的用户组)。建议在容器中切换为非 root 用户运行,以增强安全性。

练习

使用dockerfile构建名为mysql-5.7版本的镜像,构建的镜像名称为hzx/mysql:5.7,并且可以从外部连接到数据库服务

步骤

①下载指定镜像,并检查镜像库

复制代码
docker pull mysql:5.7
docker images

②编写Docker file 脚本执行自动化

③构建镜像

④启动容器并映射端口

yourpassword可以改成你自己设置的密码,必须设置密码,否则容器会无法启动

复制代码
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword hzx/mysql:v5.7

⑤使用NaviCat测试远程连接

输入主机地址,端口,登录的用户名,与上一步中设置的密码

出现以下界面表示远程连接成功

相关推荐
kymjs张涛11 小时前
OpenClaw 学习小组:初识
android·linux·人工智能
程序设计实验室13 小时前
经历分享,发现挖矿木马后,服务器快速备份与重装(腾讯云平台)
linux
Miku1614 小时前
OpenClaw-Linux+飞书官方Plugin安装指南
linux·人工智能·agent
Miku1614 小时前
OpenClaw 接入 QQ Bot 完整实践指南
linux·人工智能·agent
Yogurt_cry20 小时前
[树莓派4B] 闲置近10年的爱普生 L310 打印机爆改无线打印机
linux·物联网·树莓派
爱吃橘子橙子柚子2 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Johny_Zhao2 天前
OpenClaw中级到高级教程
linux·人工智能·信息安全·kubernetes·云计算·yum源·系统运维·openclaw
Sheffield2 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield3 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器