导出所有包到 requirements.txt
# 导出当前环境的所有包(包含版本号) conda list --export > requirements.txt# 或者使用pip格式导出(推荐用于跨平台) pip list --format=freeze > requirements.txt
Dockerfile 指令完整详解
1. FROM
- 指定基础镜像
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
参数说明:
-
<image>
:基础镜像名称(必需) -
<tag>
:镜像标签,默认为latest
-
AS <name>
:为构建阶段命名(用于多阶段构建) -
--platform
:指定平台,如linux/amd64
FROM ubuntu:20.04 FROM python:3.9-slim AS builder FROM --platform=linux/amd64 nginx:alpine
2. RUN
- 执行命令
作用:在镜像构建过程中执行命令
# Shell 格式(默认使用 /bin/sh -c) RUN <command># Exec 格式(推荐) RUN ["executable", "param1", "param2"]
RUN apt-get update && apt-get install -y curl RUN ["/bin/bash", "-c", "echo 'Hello World'"]
3. COPY
- 复制文件
作用:从构建上下文复制文件到镜像中
COPY [--chown=<user>:<group>] <源路径>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径>",... "<目标路径>"]
参数说明:
-
--chown
:设置文件所有者 -
<源路径>
:构建上下文中的文件/目录 -
<目标路径>
:容器内的绝对路径
COPY package.json ./ COPY --chown=node:node . /app COPY ["src/", "conf/", "/app/"]
4. ADD
- 高级复制
作用:类似 COPY,但功能更多(支持 URL 和解压)
特殊功能:
-
自动解压 tar、gzip 等压缩文件
-
支持从 URL 下载文件
ADD https://example.com/file.tar.gz /tmp/ ADD app.tar.gz /app/ # 自动解压
5. CMD
- 容器启动命令
作用:指定容器启动时的默认执行命令
# Exec 格式(推荐) CMD ["executable", "param1", "param2"]# Shell 格式 CMD command param1 param2# 作为 ENTRYPOINT 的参数 CMD ["param1", "param2"]
重要特性:
-
一个 Dockerfile 只能有一个
CMD
-
容易被
docker run
的参数覆盖
CMD ["nginx", "-g", "daemon off;"] CMD python app.py
6. ENTRYPOINT
- 入口点
作用:配置容器启动时的可执行文件
# Exec 格式(推荐) ENTRYPOINT ["executable", "param1", "param2"]# Shell 格式 ENTRYPOINT command param1 param2
与 CMD 的配合:
-
ENTRYPOINT
定义主要命令 -
CMD
提供默认参数 -
docker run
参数会覆盖CMD
ENTRYPOINT ["curl"] CMD ["-s", "http://localhost"]docker run my-image # 执行 curl -s http://localhost docker run my-image -I http://google.com # 执行 curl -I http://google.com
7. WORKDIR
- 工作目录
作用:设置后续指令的工作目录
WORKDIR /path/to/workdir
特性:
-
如果目录不存在会自动创建
-
相对路径基于前一个
WORKDIR
-
影响
RUN
、CMD
、COPY
、ADD
等指令
WORKDIR /app WORKDIR src # 现在路径是 /app/src WORKDIR ../build # 现在路径是 /app/build
8. ENV
- 环境变量
作用:设置环境变量
ENV NODE_ENV=production ENV APP_HOME=/app USER=appuser ENV PATH=/app/bin:$PATH
9. ARG
- 构建参数
作用:定义构建时的变量
特性:
-
只在构建过程中有效
-
运行时不可用
-
可以有默认值
ARG APP_VERSION=latest ARG BUILD_NUMBERFROM ubuntu:20.04 ARG APP_VERSION LABEL version=${APP_VERSION}
docker build --build-arg APP_VERSION=2.0.0 --build-arg BUILD_NUMBER=123 .
10. EXPOSE
- 暴露端口
作用:声明容器运行时监听的端口
EXPOSE 80/tcp EXPOSE 443 EXPOSE 3000 5000 8080
注意:这仅是声明,实际端口映射需要在运行时指定
11. VOLUME
- 数据卷
作用:创建挂载点用于数据持久化
VOLUME ["/var/log", "/data"] VOLUME /app/uploads
12. USER
- 设置用户
作用:指定运行容器时的用户
RUN groupadd -r appuser && useradd -r -g appuser appuser USER appuser USER 1000:1000
13. LABEL
- 添加元数据
作用:为镜像添加元数据
LABEL version="1.0" LABEL maintainer="dev@example.com" LABEL description="My Application" \author="Dev Team"
14. HEALTHCHECK
- 健康检查
作用:定义容器健康检查方式