国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

Dockerfile 備忘清單

這是 Dockerfile 的快速參考備忘單。包含用戶可以在命令行上調(diào)用以組裝鏡像的所有命令。

參考

繼承

默認(rèn) Dockerfile 位于上下文的根目錄中。

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

使用 -f 指向文件系統(tǒng)中任何位置的 Dockerfile

繼承

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

示例

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

變量 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 指令為任何 RUNCMD、ENTRYPOINT、COPYADD 指令設(shè)置工作目錄。

WORKDIR /myapp

VOLUME 指令創(chuàng)建一個具有指定名稱的掛載點(diǎn),并將其標(biāo)記為保存來自本機(jī)主機(jī)或其他容器的外部掛載卷。

VOLUME ["/data"]
# 安裝點(diǎn)規(guī)范
ADD file.xyz /file.xyz
# 復(fù)制
COPY --chown=user:group host_file.xyz /path/container_file.xyz

Onbuild

ONBUILD RUN bundle install
# 與另一個文件一起使用時

ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src

指令將觸發(fā)指令添加到鏡像中,以便稍后執(zhí)行,此時鏡像用作另一個構(gòu)建的基礎(chǔ)。

在嚴(yán)格的 shell 中運(yùn)行命令

ENV my_var
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
# 使用嚴(yán)格模式:
RUN false         # ails 像使用 && 一樣構(gòu)建
RUN echo "$myvar" # 由于拼寫錯誤會拋出錯誤
RUN true | false  # 將脫離管道

使用 shell 將為 shell 命令打開嚴(yán)格模式。

命令 CMD

:--
CMD ["executable","param1","param2"](exec 形式,這是首選形式)
CMD ["param1","param2"](作為 ENTRYPOINT 的默認(rèn)參數(shù))
CMD command param1 param2(shell形式)
EXPOSE 5900
CMD ["bundle", "exec", "rails", "server"]

入口點(diǎn) ENTRYPOINT

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

配置將作為可執(zhí)行文件運(yùn)行的容器。

ENTRYPOINT exec top -b

這將使用 shell 處理來替換 shell 變量,并將忽略任何 CMDdocker run 命令行參數(shù)。

元數(shù)據(jù) LABEL

LABEL version="1.0"
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="本文說明\
標(biāo)簽值可以跨越多行。"
LABEL multi.label1="value1" \
      multi.label2="value2" \
      other="value3"

ARG

ARG <name>[=<default value>]

指令定義了一個變量,在構(gòu)建時通過 docker build 命令使用 --build-arg <varname>=<value> 標(biāo)志將其傳遞給構(gòu)建器。

FROM busybox
# user1 默認(rèn)值為 someuser
ARG user1=someuser
ARG buildno=1

.dockerignore 文件

# 注釋說明
*/temp*
*/*/temp*
temp?

:--
# comment忽略
*/temp*在根的任何直接子目錄中
排除名稱以 temp 開頭的文件和目錄
*/*/temp*從根以下兩級的任何子目錄中
排除以 temp 開頭的文件和目錄
temp?排除根目錄中名稱為
temp 的單字符擴(kuò)展名的文件和目錄

如果此文件存在,排除與其中的模式匹配的文件和目錄,有利于避免 ADDCOPY 將敏感文件添加到鏡像中。匹配是使用 Go 的 filepath.Match 規(guī)則完成的。

主要命令

命令說明
FROM image構(gòu)建的基礎(chǔ)鏡像
MAINTAINER email(已棄用)維護(hù)者的名字
COPY [--chown=<user>:<group>] <src>... <dest>將上下文中的路徑復(fù)制到位置 dest 的容器中
ADD [--chown=<user>:<group>] <src>... <dest>COPY 相同,但解壓縮存檔并接受 http url。
RUN <command>在容器內(nèi)運(yùn)行任意命令。
USER <user>[:<group>]設(shè)置默認(rèn)用戶名。
WORKDIR /path/to/workdir設(shè)置默認(rèn)工作目錄。
CMD command param1 param2設(shè)置默認(rèn)命令
ENV <key>=<value> ...設(shè)置環(huán)境變量
EXPOSE <port> [<port>/<protocol>...]運(yùn)行時偵聽指定的網(wǎng)絡(luò)端口

Dockerfile 示例

服務(wù)靜態(tài)網(wǎng)站的最小 Docker 鏡像

FROM lipanski/docker-static-website:latest
# 使用 .dockerignore 文件來控制鏡像中的內(nèi)容!
# 復(fù)制當(dāng)前目錄內(nèi)容,到容器中
COPY ./ .

這會產(chǎn)生一個 154KB + 的單層鏡像。 如果您需要以不同的方式配置 httpd,您可以覆蓋 CMD 行:

FROM lipanski/docker-static-website:latest
COPY . .

CMD ["/busybox","httpd","-f","-v","-p","3000","-c","httpd.conf"]

縮小鏡像過程查看原文,鏡像 Dockerfile 源碼。

Docker 鏡像多階段構(gòu)建

FROM golang:alpine as builder
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest as prod
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/go/helloworld/app .
CMD ["./app"]

使用多階段構(gòu)建能將構(gòu)建依賴留在 builder 鏡像中,只將編譯完成后的二進(jìn)制文件拷貝到運(yùn)行環(huán)境中,大大減少鏡像體積。

也可以看看