亚洲成A人片在线观看网站_成年网站免费视频A在线双飞_日日日日做夜夜夜夜无码_久久夜色撩人精品国产小说

Dockerfile 備忘清單

這是(shi) 的(de)快速(su)參考備忘(wang)單。包含用(yong)戶可以在命令行上調用(yong)以組裝鏡像的(de)所有(you)命令。

參考

繼承

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

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

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 指令為任何 RUNCMDENTRYPOINTCOPYADD 指令設置工作目錄。

WORKDIR /myapp

VOLUME 指令(ling)創建一個具(ju)有指定名稱的掛載點,并將其標記為保存來自本機(ji)主機(ji)或其他容器的外部掛載卷。

VOLUME ["/data"]
# 安裝點規范
ADD file.xyz /file.xyz
# 復制
COPY --chown=user:group host_file.xyz /path/container_file.xyz

Onbuild

ONBUILD RUN bundle install
# 與另(ling)一(yi)個文(wen)件一(yi)起使用(yong)時

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

指(zhi)令(ling)將(jiang)觸發(fa)指(zhi)令(ling)添加到(dao)鏡(jing)(jing)像中(zhong),以便稍后執行,此(ci)時鏡(jing)(jing)像用作另一個構建的基礎。

在嚴格的 shell 中運行命令

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

使用 shell 將為 shell 命令打(da)開(kai)嚴格(ge)模式。

命令 CMD

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

入口點 ENTRYPOINT

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

配(pei)置將作為可執行文件運行的容器。

ENTRYPOINT exec top -b

這將使用 shell 處理來替換 shell 變量,并將忽略任何 CMDdocker 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="本文(wen)說明\
標簽值(zhi)可以跨越多行。"
LABEL multi.label1="value1" \
      multi.label2="value2" \
      other="value3"

ARG

ARG <name>[=<default value>]

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

FROM busybox
# user1 默(mo)認(ren)值為 someuser
ARG user1=someuser
ARG buildno=1

.dockerignore 文件

# 注釋說明(ming)
*/temp*
*/*/temp*
temp?

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

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

主要命令

命令說明
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>...]運行時偵聽指定的網絡端口

Dockerfile 示例

服務靜態網站的最小 Docker 鏡像

FROM lipanski/docker-static-website:latest
# 使用 .dockerignore 文件來(lai)控制鏡像中(zhong)的(de)內容(rong)!
# 復(fu)制當(dang)前目錄內容,到容器中
COPY ./ .

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

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

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

縮小鏡(jing)像過程,鏡(jing)像 。

Docker 鏡像多階段構建

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"]

使(shi)用多階段構建能將構建依賴留(liu)在 builder 鏡像中,只將編譯完成后的二進(jin)制(zhi)文件(jian)拷貝(bei)到運行(xing)環境(jing)中,大大減少(shao)鏡像體積。

也可以看看