写点什么

Dockerfile 常用命令

作者:蜗牛也是牛
  • 2022-11-20
    河北
  • 本文字数:1544 字

    阅读完需:约 5 分钟

继承

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

docker build -f /path/to/a/Dockerfile .
复制代码

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

继承

FROM [--platform=<platform>] <image> [AS <name>]
复制代码

示例

FROM ruby:2.2.2FROM golang:1.19-alpine3.16 AS build-env
复制代码

变量 ENV

ENV <key>=<value> ...
复制代码


ENV APP_HOME /myappRUN mkdir $APP_HOME
复制代码


ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \    MY_CAT=fluffy
复制代码

初始化

RUN bundle install
复制代码

WORKDIR 指令为任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。

WORKDIR /myapp
复制代码

VOLUME 指令创建一个具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。

VOLUME ["/data"]# 安装点规范
复制代码


ADD file.xyz /file.xyz# 复制COPY --chown=user:group host_file.xyz /path/container_file.xyz
复制代码

Onbuild

ONBUILD RUN bundle install# 与另一个文件一起使用时
ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src
复制代码

指令将触发指令添加到镜像中,以便稍后执行,此时镜像用作另一个构建的基础。

在严格的 shell 中运行命令

ENV my_varSHELL ["/bin/bash", "-euo", "pipefail", "-c"]# 使用严格模式:RUN false         # ails 像使用 && 一样构建RUN echo "$myvar" # 由于拼写错误会抛出错误RUN true | false  # 将脱离管道
复制代码

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

命令 CMD


EXPOSE 5900CMD ["bundle", "exec", "rails", "server"]
复制代码

入口点 ENTRYPOINT

ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2
复制代码

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

ENTRYPOINT exec top -b
复制代码

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

元数据 LABEL

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"
复制代码

ARG

ARG <name>[=<default value>]
复制代码

指令定义了一个变量,在构建时通过 docker build 命令使用 --build-arg <varname>=<value> 标志将其传递给构建器。

FROM busybox# user1 默认值为 someuserARG user1=someuserARG buildno=1
复制代码

.dockerignore 文件

# 注释说明*/temp**/*/temp*temp?
复制代码



如果此文件存在,排除与其中的模式匹配的文件和目录,有利于避免 ADD 或 COPY 将敏感文件添加到镜像中。匹配是使用 Go 的 filepath.Match 规则完成的。

主要命令

Dockerfile 示例

服务静态网站的最小 Docker 镜像

FROM lipanski/docker-static-website:latest# 使用 .dockerignore 文件来控制图像中的内容!# 复制当前目录内容,到容器中COPY ./ .
复制代码

这会产生一个 154KB + 的单层镜像。 如果您需要以不同的方式配置 httpd,您可以覆盖 CMD 行:

FROM lipanski/docker-static-website:latestCOPY . .
CMD ["/busybox","httpd","-f","-v","-p","3000","-c","httpd.conf"]
复制代码

缩小镜像过程查看原文,镜像 Dockerfile 源码。

Docker 镜像多阶段构建

FROM golang:alpine as builderRUN apk --no-cache add gitWORKDIR /go/src/github.com/go/helloworld/RUN go get -d -v github.com/go-sql-driver/mysqlCOPY app.go .RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest as prodRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /go/src/github.com/go/helloworld/app .CMD ["./app"]
复制代码

使用多阶段构建能将构建依赖留在 builder 镜像中,只将编译完成后的二进制文件拷贝到运行环境中,大大减少镜像体积。

发布于: 刚刚阅读数: 5
用户头像

云原生。技术这东东,不怕慢,就怕站; 2022-02-13 加入

还未添加个人简介

评论

发布
暂无评论
Dockerfile 常用命令_蜗牛也是牛_InfoQ写作社区