溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker中怎么利用Dockerfile創(chuàng)建自定義鏡像

發(fā)布時間:2021-07-28 15:19:18 來源:億速云 閱讀:247 作者:Leah 欄目:云計算

本篇文章為大家展示了docker中怎么利用Dockerfile創(chuàng)建自定義鏡像,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Dockerfile是一個文本格式的配置文件,用戶可以使用dockerfile來快速創(chuàng)建自定義鏡像。指令包括“配置指令”、“操作指令”。

配置指令

FROM

FROM debian:jessie
dockerfile的第一行指令,指定基礎(chǔ)鏡像

ARG

ARG VERSION=9.3
定義創(chuàng)建鏡像過程中的臨時變量,相當(dāng)于dockerfile運行中的臨時變量

LABEL

LABEL version="1.1.1.1"
為生成的鏡像添加元數(shù)據(jù)標(biāo)簽信息,方便過濾

EXPOSE

EXPOSS 22 80 443
聲明鏡像內(nèi)服務(wù)監(jiān)聽端口,如果需要映射出來,啟動容器時使用-p hostport:container_port參數(shù)映射指定端口。

ENV

ENV APP_VERSION=1.0.0
指定環(huán)境變量,方便給后續(xù)RUN使用,可以被docker啟動時指定的--env給覆蓋

ENTRYPOINT

ENTRYPOINT ["tail"]
指定默認(rèn)入口命令,作為啟動容器時候的根命令執(zhí)行,每個dockerfile中只有一個ENTRYPOINT,運行時可以被--entrypoint參數(shù)覆蓋,與CMD參數(shù)的區(qū)別,在“操作指令CMD中說明”

VOLUME

VOLUME ["/data"]
掛載數(shù)據(jù)卷

USER

USER daemon
指定運行容器時的用戶名或UID,后續(xù)的RUN指令也會使用該用戶身份,也可創(chuàng)建一個用戶
RUN groupadd -r postgres && useradd --no-log--init -r -g postgres postgres
需要獲取管理員權(quán)限使用gosu命令

WORKDIR

WORKDIR /app
為后續(xù)的RUN,CMD,ENTRYPOINT指令配置工作目錄

ONBUILD

ONBUILD RUN /python-build --dir /user/app
在dockerfile中指定該參數(shù),當(dāng)子dockerfile使用該dockerfile創(chuàng)建出來的鏡像為基礎(chǔ)鏡像時,會先執(zhí)行該命令。優(yōu)先用于創(chuàng)建自動編譯,檢查基礎(chǔ)鏡像時使用

STOPSIGNAL

STOPSIGNAL signal
指定創(chuàng)建鏡像啟動的容器接收退出的信號值

HEALTHCHECK

HEALTHCHECK NONE:不進行健康檢查 HEALTHCHECK CMD command:根據(jù)使用命令返回值是否為0,為0則健康,默認(rèn)30s檢查一次,等待結(jié)果30s超時,重試3次。如果不健康,會在 STATUS中顯示unhealthy

SHELL

SHELL ["/bin/sh","-c"]
指定其他命令使用shell時的shell類型,windows系統(tǒng)的分隔符不一致,在dockerfile的開頭中使用#escape='來轉(zhuǎn)譯

操作指令

RUN

RUN apt-get update
RUN ["/bin/bash","-c","apt-get update"]
運行指定指令,每次運行基于上一次運行的基礎(chǔ)鏡像生成新的鏡像層

CMD

CMD ["python","run.py"]
CMD python run.py
指定啟動容器時默認(rèn)執(zhí)行的命令,當(dāng)時用ENTRYPOINT參數(shù)時,CMD的參數(shù)會作為默認(rèn)參數(shù)傳入ENTRYPOINT,如:
CMD [“tail”,"-f","/usr/aaa"]
ENTRYPOINT ["tail"]
憑借拼接為tailf tailf -f /usr/aaa,顯然這個命令會有異常,需要注意合理使用。

COPY

COPY . /app 復(fù)制當(dāng)前目錄下所有文件到/app目錄,基礎(chǔ)鏡像沒有這個目錄會創(chuàng)建出來

ADD

ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
COPY的高級命令。
如果<源路徑>為一個tar壓縮文件的話,壓縮格式為gzip,bzip2以及xz的情況下,ADD指令將會自動解壓縮這個壓縮文件到<目標(biāo)路徑>去,如果不為壓縮文件,則與COPY一致,如果需要壓縮文件拷貝進去,則需要使用COPY命令

多階段構(gòu)建

#構(gòu)建第一段,創(chuàng)建編譯環(huán)境
FROM golang:1.8-alpine as builder

RUN apk --no-cache add git

WORKDIR /go/src/github/go/HelloWorld/

RUN go get -d -v github/go-sql-driver/mysql

COPY app.go .
#編譯環(huán)境
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
#構(gòu)建第二段,運行環(huán)境鏡像
FROM alpine:latest as prog

RUN apk --no-cache add ca-certificates

WORKDIR /root/
#--from=0從編譯環(huán)境容器中將編譯好的二進制文件拷貝到當(dāng)前目錄
#COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf,也可拷貝其他鏡像中的文件
COPY --from=0 /go/src/github/go/Helloworld/app .

CMD ["./app"]

.dockerignore文件

.idea
__pycache__
itchat.pkl
QR.png

制作鏡像時不將這些文件傳入鏡像,減少鏡像體積,加快制作過程。

dockerfile經(jīng)驗

盡量合并ADD RUN COPY等命令,減少驚喜那個層數(shù),恰當(dāng)多步驟創(chuàng)建,精簡基礎(chǔ)鏡像,使用.dockerignore文件,減少外部源的干擾。

上述內(nèi)容就是docker中怎么利用Dockerfile創(chuàng)建自定義鏡像,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI