這是 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 <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 指令為任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令設(shè)置工作目錄。
WORKDIR /myapp
VOLUME 指令創(chuàng)建一個具有指定名稱的掛載點(diǎn),并將其標(biāo)記為保存來自本機(jī)主機(jī)或其他容器的外部掛載卷。
VOLUME ["/data"]
# 安裝點(diǎn)規(guī)范
ADD file.xyz /file.xyz
# 復(fù)制
COPY host_file.xyz /path/container_file.xyz
ONBUILD RUN bundle install
# 與另一個文件一起使用時
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
指令將觸發(fā)指令添加到鏡像中,以便稍后執(zhí)行,此時鏡像用作另一個構(gòu)建的基礎(chǔ)。
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 ["executable","param1","param2"] | (exec 形式,這是首選形式) |
CMD ["param1","param2"] | (作為 ENTRYPOINT 的默認(rèn)參數(shù)) |
CMD command param1 param2 | (shell形式) |
EXPOSE 5900
CMD ["bundle", "exec", "rails", "server"]
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
配置將作為可執(zhí)行文件運(yùn)行的容器。
ENTRYPOINT exec top -b
這將使用 shell 處理來替換 shell 變量,并將忽略任何 CMD 或 docker run 命令行參數(shù)。
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 <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
# 注釋說明
*/temp*
*/*/temp*
temp?
| :- | - |
|---|---|
# comment | 忽略 |
*/temp* | 在根的任何直接子目錄中 排除名稱以 temp 開頭的文件和目錄 |
*/*/temp* | 從根以下兩級的任何子目錄中 排除以 temp 開頭的文件和目錄 |
temp? | 排除根目錄中名稱為temp 的單字符擴(kuò)展名的文件和目錄 |
如果此文件存在,排除與其中的模式匹配的文件和目錄,有利于避免 ADD 或 COPY 將敏感文件添加到鏡像中。匹配是使用 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ò)端口 |
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 源碼。
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 /go/src/github.com/go/helloworld/app .
CMD ["./app"]
使用多階段構(gòu)建能將構(gòu)建依賴留在 builder 鏡像中,只將編譯完成后的二進(jìn)制文件拷貝到運(yùn)行環(huán)境中,大大減少鏡像體積。
感谢您访问我们的网站,您可能还对以下资源感兴趣:
国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片