Dockerfile

Dockerfile是什么

Dockerfile 是一种用于定义镜像内容和构建流程的文本文件,里面包含了一些命令,告诉Docker应该如何构建镜像。

Dockerfile的作用

作用工程价值
自动化构建镜像减少人为配置错误
保证环境一致性解决“我这能跑你那不行”问题
快速部署/迁移新机器、云服务器、K8s 一键运行
支持 CI/CD是自动化流水线的基础
可版本控制可与代码一同托管在 Git 中

举个实际开发项目的场景:

你有一个 Web 项目:

  • 后端是 Flask
  • 前端是 React
  • 使用 Redis 缓存,MySQL 数据库

你可以写多个 Dockerfile 分别定义前后端服务的镜像:

  • Dockerfile.frontend
  • Dockerfile.backend

然后使用 docker build 构建,再使用 docker rundocker compose 启动。

这样,整个项目变成可以在任何机器上几分钟启动的容器化服务,适合部署到:

  • 内网服务器
  • Docker Hub / 阿里云容器仓库
  • Kubernetes / 云平台

从Dockerfile到镜像流程

Dockerfile –> docker build –> 镜像(image) –> docker run –> 容器(container)

Dockerfile的指令

FROM #指定基础镜像,一般为FROM scratch,大概意思为从零开始,不依赖基础镜像

ADD #添加本地或远程文件和目录。

CMD #容器启动时,默认运行的命令(可被覆盖)

COPY #复制文件或目录

ENTRYPOINT #指定默认可执行文件按

ENV #设置环境变量

EXPOSE #暴露指定端口

VOLUME #创建卷挂载

WORKDIR #更改工作目录

USER #设置用户和组ID

RUN #执行生成命令

SHELL #设置图像的默认外壳

STOPSIGNAL #指定用于退出容器的系统调用信号

ONVUILD #指定用于退出容器的系统调用信号

MAINTAINER #指定图像的作者

LABEL #向图像添加元数据

HEALTHCHECK #在启动是检查容器的健康情况

ARG #使用构建时变量

上手项目

基础阶段:基于Ubuntu安装curl并输出信号

(1)目录结构

ubuntu-curl/
└── Dockerfile

(2)Dockerfile内容

FROM ubuntu:22.04 #使用ubuntu作为基础镜像

ENV DEBIAN_FRONTEND=noninteractive //防止tzdata 安装交互卡住

RUN apt-get update && \ #安装curl

apt-get install -y curl && \

apt-get clean && \

rm -rf /var/lib/apt/lists/*

CMD [“curl”,”–version”] #默认执行 curl –version

(3)构建镜像

docker build -t ubuntu-curl

(4)运行容器

docker run -t ubuntu-curl

输出:curl 7.81.0 (x86_64-pc-linux-gnu) …

以上则熟悉了dockerfile的一些基础命令,能够简单封装一些应用了。

构建进阶:构建一个带版本信息和 curl 的轻量镜像

ENV:设置环境变量(运行时 + 构建时都能用)

语法:ENV 变量名=值

示例:ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8

ARG:构建参数(只在构建镜像时可用)

语法:ARG NAME=默认值

示例:ARG VERSION=1.0
RUN echo “Build version is $VERSION”

使用方法:docker build –build-arg VERSION=2.0 -t myimage .

.dockerignore:避免无用文件进入镜像上下文(减小体积 + 加速构建)

在项目目录下创建一个 .dockerignore 文件

示例:.git
node_modules
*.log
Dockerfile~
*.md

(1)目录结构

ubuntu-version-curl/
├── Dockerfile
├── .dockerignore
└── README.md

(2)Dockerfile内容

FROM ubuntu:22.04 #使用基础镜像

ARG VERSION=dev #构造参数

ENV APP_VERSION=$VERSION #设置环境变量

ENV TZ=Asia/Shanghai

ENV LANG=C.UTF-8

RUN apt-get update && \ #安装curl

apt-get install -y curl && \

apt-get clean && \

rm -rf /var/lib/apt/lists/*

CMD [“/bin/bash/”,”-c”,”echo ‘APP Version: $APP_VERSION’&& curl –version”] #默认执行命令、显示版本信息+输出版本号

(3).dockerignore内容

.dockerignore
README.md
.git
*.log
*.tmp

(4)构建镜像

cd ubuntu-version-curl

docker build -t ubuntu-version-curl –build-arg VERSION=1.0.5 . #传入版本号作为镜像参数

(5)运行容器

docker run –rm ubuntu-version-curl

输出:App Version: 1.0.5
curl 7.81.0 …

最后修改日期: 2025年5月17日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。