
Dockerfile
Dockerfile是什么
Dockerfile 是一种用于定义镜像内容和构建流程的文本文件,里面包含了一些命令,告诉Docker应该如何构建镜像。
Dockerfile的作用
作用 | 工程价值 |
---|---|
自动化构建镜像 | 减少人为配置错误 |
保证环境一致性 | 解决“我这能跑你那不行”问题 |
快速部署/迁移 | 新机器、云服务器、K8s 一键运行 |
支持 CI/CD | 是自动化流水线的基础 |
可版本控制 | 可与代码一同托管在 Git 中 |
举个实际开发项目的场景:
你有一个 Web 项目:
- 后端是 Flask
- 前端是 React
- 使用 Redis 缓存,MySQL 数据库
你可以写多个 Dockerfile 分别定义前后端服务的镜像:
Dockerfile.frontend
Dockerfile.backend
然后使用 docker build
构建,再使用 docker run
或 docker 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 …
留言