reference/docs/dockerfile.md
2022-09-30 17:33:13 +08:00

3.2 KiB

Dockerfile 备忘清单

这是 Dockerfile 的快速参考备忘单。包含用户可以在命令行上调用以组装镜像的所有命令。

参考

继承

默认 Dockerfile 位于上下文的根目录中。

docker build -f /path/to/a/Dockerfile .

使用 -f 指向文件系统中任何位置的 Dockerfile

继承

FROM [--platform=<platform>] <image> [AS <name>]

示例

FROM ruby:2.2.2
FROM golang:1.19-alpine3.16 AS build-env

变量

ENV <key>=<value> ...
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
    MY_CAT=fluffy

初始化

RUN bundle install
WORKDIR /myapp
VOLUME ["/data"]
# 安装点规范
ADD file.xyz /file.xyz
COPY --chown=user:group host_file.xyz /path/container_file.xyz

Onbuild

ONBUILD RUN bundle install
# 与另一个文件一起使用时

命令

EXPOSE 5900
CMD ["bundle", "exec", "rails", "server"]

在严格的 shell 中运行命令

ENV my_var
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
# With strict mode:
RUN false         # ails 像使用 && 一样构建
RUN echo "$myvar" # 由于拼写错误会抛出错误
RUN true | false  # 将脱离管道

使用 shell 将为 shell 命令打开严格模式。

入口点

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

配置将作为可执行文件运行的容器。

ENTRYPOINT exec top -b

这将使用 shell 处理来替换 shell 变量,并将忽略任何 CMDdocker run 命令行参数。

元数据

LABEL version="1.0"
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="本文说明\
标签值可以跨越多行。"
LABEL multi.label1="value1" \
      multi.label2="value2" \
      other="value3"

主要命令

命令 说明
FROM image 构建的基础镜像
MAINTAINER email (已弃用)维护者的名字
COPY [--chown=<user>:<group>] <src>... <dest> 将上下文中的路径复制到位置 dest 的容器中
ADD [--chown=<user>:<group>] <src>... <dest> COPY 相同,但解压缩存档并接受 http url。
RUN <command> 在容器内运行任意命令。
USER <user>[:<group>] 设置默认用户名。
WORKDIR /path/to/workdir 设置默认工作目录。
CMD command param1 param2 设置默认命令
ENV <key>=<value> ... 设置环境变量
EXPOSE <port> [<port>/<protocol>...] 运行时侦听指定的网络端口

也可以看看