常用命令
-
FROM
: 指定基础镜像。每个 Dockerfile 必须以 FROM
指令开始。
FROM ubuntu:20.04
-
RUN
: 执行命令并创建镜像层。常用于安装软件包。
RUN apt-get update && apt-get install -y python3
-
COPY
: 将文件或目录从宿主机复制到镜像内。
COPY ./localfile /path/in/container/
-
ADD
: 功能类似于 COPY
,但可以处理 URL 和解压压缩文件。
ADD https://example.com/file.tar.gz /path/in/container/
-
CMD
: 指定容器启动时默认执行的命令。每个 Dockerfile 只能有一个 CMD
,如果指定多个,只有最后一个会生效。
CMD ["python3", "app.py"]
-
ENTRYPOINT
: 类似于 CMD
,但不容易被覆盖。通常与 CMD
结合使用来提供默认参数。
ENTRYPOINT ["python3"]
CMD ["app.py"]
-
WORKDIR
: 设置工作目录。如果目录不存在,会自动创建。
WORKDIR /app
-
ENV
: 设置环境变量。
ENV APP_ENV=production
-
EXPOSE
: 声明容器监听的端口。这只是一个说明性指令,不会实际打开端口。
EXPOSE 8080
-
VOLUME
: 创建挂载点,从而允许持久化存储。
VOLUME ["/data"]
-
USER
: 指定运行容器时使用的用户名或 UID。
USER appuser
-
LABEL
: 添加元数据到镜像中。
LABEL maintainer="you@example.com"
-
ARG
: 定义构建参数,可以在构建时传递。
ARG VERSION=1.0
RUN echo "Version: $VERSION"
-
ONBUILD
: 设置触发器,当其他镜像基于当前镜像构建时执行。
ONBUILD RUN echo "This runs on build"
-
SHELL
: 指定默认的 shell,可以覆盖默认的 /bin/sh -c
。
SHELL ["powershell", "-Command"]
示例
# 使用 node 官方镜像作为基础镜像
FROM node:16-alpine
# 设置环境变量
ENV NODE_ENV=production
# 创建并设置工作目录
WORKDIR /usr/src/app
# 先复制 package.json 和 package-lock.json 文件
COPY package*.json ./
# 安装项目依赖
RUN npm install --production
# 复制项目文件到容器内工作目录
COPY . .
# 如果你的应用程序需要编译,例如使用 TypeScript 或 Babel,
# 你可以在这里运行构建命令
RUN npm run build
# 暴露容器端口,要与你的 app 实际监听的端口一致
EXPOSE 3000
# 运行应用程序
CMD ["npm", "start"]