本篇文章為大家展示了docker中怎么利用Dockerfile創(chuàng)建自定義鏡像,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、察雅ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的察雅網(wǎng)站制作公司
Dockerfile是一個(gè)文本格式的配置文件,用戶可以使用dockerfile來(lái)快速創(chuàng)建自定義鏡像。指令包括“配置指令”、“操作指令”。
FROM debian:jessie
dockerfile的第一行指令,指定基礎(chǔ)鏡像
ARG VERSION=9.3
定義創(chuàng)建鏡像過(guò)程中的臨時(shí)變量,相當(dāng)于dockerfile運(yùn)行中的臨時(shí)變量
LABEL version="1.1.1.1"
為生成的鏡像添加元數(shù)據(jù)標(biāo)簽信息,方便過(guò)濾
EXPOSS 22 80 443
聲明鏡像內(nèi)服務(wù)監(jiān)聽(tīng)端口,如果需要映射出來(lái),啟動(dòng)容器時(shí)使用-p hostport:container_port
參數(shù)映射指定端口。
ENV APP_VERSION=1.0.0
指定環(huán)境變量,方便給后續(xù)RUN
使用,可以被docker啟動(dòng)時(shí)指定的--env給覆蓋
ENTRYPOINT ["tail"]
指定默認(rèn)入口命令,作為啟動(dòng)容器時(shí)候的根命令執(zhí)行,每個(gè)dockerfile中只有一個(gè)ENTRYPOINT,運(yùn)行時(shí)可以被--entrypoint參數(shù)覆蓋,與CMD
參數(shù)的區(qū)別,在“操作指令CMD中說(shuō)明”
VOLUME ["/data"]
掛載數(shù)據(jù)卷
USER daemon
指定運(yùn)行容器時(shí)的用戶名或UID,后續(xù)的RUN指令也會(huì)使用該用戶身份,也可創(chuàng)建一個(gè)用戶RUN groupadd -r postgres && useradd --no-log--init -r -g postgres postgres
需要獲取管理員權(quán)限使用gosu
命令
WORKDIR /app
為后續(xù)的RUN,CMD,ENTRYPOINT指令配置工作目錄
ONBUILD RUN /python-build --dir /user/app
在dockerfile中指定該參數(shù),當(dāng)子dockerfile使用該dockerfile創(chuàng)建出來(lái)的鏡像為基礎(chǔ)鏡像時(shí),會(huì)先執(zhí)行該命令。優(yōu)先用于創(chuàng)建自動(dòng)編譯,檢查基礎(chǔ)鏡像時(shí)使用
STOPSIGNAL signal
指定創(chuàng)建鏡像啟動(dòng)的容器接收退出的信號(hào)值
HEALTHCHECK NONE
:不進(jìn)行健康檢查HEALTHCHECK CMD command
:根據(jù)使用命令返回值是否為0,為0則健康,默認(rèn)30s檢查一次,等待結(jié)果30s超時(shí),重試3次。如果不健康,會(huì)在 STATUS中顯示unhealthy
SHELL ["/bin/sh","-c"]
指定其他命令使用shell時(shí)的shell類型,windows系統(tǒng)的分隔符不一致,在dockerfile的開(kāi)頭中使用#escape='
來(lái)轉(zhuǎn)譯
RUN apt-get update
RUN ["/bin/bash","-c","apt-get update"]
運(yùn)行指定指令,每次運(yùn)行基于上一次運(yùn)行的基礎(chǔ)鏡像生成新的鏡像層
CMD ["python","run.py"]
或CMD python run.py
指定啟動(dòng)容器時(shí)默認(rèn)執(zhí)行的命令,當(dāng)時(shí)用ENTRYPOINT
參數(shù)時(shí),CMD
的參數(shù)會(huì)作為默認(rèn)參數(shù)傳入ENTRYPOINT
,如:CMD [“tail”,"-f","/usr/aaa"]
ENTRYPOINT ["tail"]
憑借拼接為tailf tailf -f /usr/aaa
,顯然這個(gè)命令會(huì)有異常,需要注意合理使用。
COPY . /app
復(fù)制當(dāng)前目錄下所有文件到/app目錄,基礎(chǔ)鏡像沒(méi)有這個(gè)目錄會(huì)創(chuàng)建出來(lái)
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
COPY的高級(jí)命令。
如果<源路徑>
為一個(gè)tar
壓縮文件的話,壓縮格式為gzip
,bzip2
以及xz
的情況下,ADD
指令將會(huì)自動(dòng)解壓縮這個(gè)壓縮文件到<目標(biāo)路徑>
去,如果不為壓縮文件,則與COPY
一致,如果需要壓縮文件拷貝進(jìn)去,則需要使用COPY
命令
#構(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)建第二段,運(yùn)行環(huán)境鏡像 FROM alpine:latest as prog RUN apk --no-cache add ca-certificates WORKDIR /root/ #--from=0從編譯環(huán)境容器中將編譯好的二進(jìn)制文件拷貝到當(dāng)前目錄 #COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf,也可拷貝其他鏡像中的文件 COPY --from=0 /go/src/github/go/Helloworld/app . CMD ["./app"]
.idea __pycache__ itchat.pkl QR.png
制作鏡像時(shí)不將這些文件傳入鏡像,減少鏡像體積,加快制作過(guò)程。
盡量合并ADD RUN COPY
等命令,減少驚喜那個(gè)層數(shù),恰當(dāng)多步驟創(chuàng)建,精簡(jiǎn)基礎(chǔ)鏡像,使用.dockerignore文件,減少外部源的干擾。
上述內(nèi)容就是docker中怎么利用Dockerfile創(chuàng)建自定義鏡像,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。