Docker 常用指令

以下是常用的 Dockerfile 指令和它们的功能:

1. FROM

定义镜像的基础镜像。每个 Dockerfile 都应该以 FROM 开头,指定使用哪个基础镜像构建当前镜像。

FROM ubuntu:20.04

2. RUN

在镜像构建过程中执行命令,如安装软件包、更新系统等。每个 RUN 指令都会创建一个新的镜像层。

RUN apt-get update && apt-get install -y python3

3. CMD

指定容器启动时默认执行的命令。通常,CMD 用于启动应用程序。一个 Dockerfile 只能有一个 CMD,如果有多个 CMD,最后一个 CMD 会生效。

CMD ["python3", "app.py"]

4. ENTRYPOINT

定义容器启动时始终执行的命令,通常与 CMD 结合使用。ENTRYPOINT 会始终执行,但 CMD 中的内容会作为默认参数传递给 ENTRYPOINT

ENTRYPOINT ["python3"]
CMD ["app.py"]

5. ENV

设置环境变量,容器在运行时可以访问这些变量。你可以通过 ENV 来定义多个环境变量。

ENV APP_ENV=production
ENV DB_HOST=db.local

6. COPY

将文件从主机复制到容器内指定的路径。与 ADD 相比,COPY 更为简单和明确,通常用于复制本地文件到镜像中。

COPY ./myapp /app

7. ADD

除了复制文件外,ADD 还可以解压 .tar 文件和从 URL 下载文件。虽然 COPY 更推荐用于复制本地文件,但 ADD 对某些情况(如从 URL 下载文件)更为方便。

ADD ./source.tar.gz /app

8. EXPOSE

声明容器需要监听的端口。EXPOSE 本身不会发布端口,但它告诉 Docker 用户和其他开发者容器将使用哪些端口。

EXPOSE 8080

9. VOLUME

创建一个挂载点,允许数据从宿主机或其他容器挂载到容器内的指定路径。常用于持久化数据。

VOLUME ["/data"]

10. WORKDIR

设置工作目录,所有后续的命令(如 RUNCMD 等)都会在该目录中执行。如果目录不存在,WORKDIR 会创建它。

WORKDIR /app

11. USER

指定容器内运行命令的用户。默认情况下,容器以 root 用户运行,可以通过 USER 指定其他用户。

USER appuser

12. ARG

定义构建时的变量,ARG 的值在构建时提供,可以用作参数传递给 RUN 命令等。

ARG APP_VERSION=1.0
RUN echo "App version: $APP_VERSION"

13. LABEL

给镜像添加元数据,例如版本、作者、描述等。LABEL 可以使用键值对来存储信息。

LABEL version="1.0" author="developer"

14. SHELL

更改容器中默认的 shell,默认情况下是 /bin/sh -c,可以将其更改为其他 shell,如 bash

SHELL ["/bin/bash", "-c"]

15. STOPSIGNAL

设置容器停止时发送的信号。默认情况下,Docker 会发送 SIGTERM 信号来停止容器,但你可以通过 STOPSIGNAL 指定其他信号(例如 SIGINT)。

STOPSIGNAL SIGTERM

16. HEALTHCHECK

定义容器的健康检查命令,Docker 会定期执行该命令来检查容器是否健康。你可以定义检查的时间间隔、重试次数等。

HEALTHCHECK --interval=30s --retries=3 CMD curl --fail http://localhost/health || exit 1

17. ONBUILD

指定当作为基础镜像时,执行的指令。它常用于定义父镜像中的某些构建步骤,在子镜像中自动执行。ONBUILD 指令通常用于构建可复用的基础镜像。

ONBUILD RUN echo "This will run when this image is used as a base."

18. COPY --from (多阶段构建)

用于多阶段构建中,从另一个构建阶段复制文件。多阶段构建可以帮助减少最终镜像的大小。

FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o myapp .

FROM alpine:3.12
COPY --from=builder /src/myapp /usr/local/bin/

总结

除了 FROMRUNCMDENV 之外,Dockerfile 还有很多其他有用的指令,帮助你在构建镜像时更好地配置环境、管理文件和优化性能。以下是这些指令的总结:

  • 定义镜像环境FROMENVLABELWORKDIR
  • 运行命令RUNCMDENTRYPOINT
  • 文件操作COPYADDVOLUME
  • 容器管理EXPOSEUSERSTOPSIGNAL
  • 构建优化ARGHEALTHCHECKONBUILD
  • 多阶段构建COPY --from

这些指令可以帮助你创建更灵活、可维护且高效的 Docker 镜像。

THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容