Docker 大熱,還不了解 Dockerfile 你就OUT啦~

前言:近年來 Docker 非?;?,想要玩好 Docker 的話 Dockerfile 是繞不開的,這就好比想要玩好 Linux 服務(wù)器繞不開 shell 道理是一樣的。今天我們就來聊一聊 Dockerfile 怎么寫,那些指令到底是什么意思。

一、先來看一個(gè)簡單的 Dockerfile

#這個(gè)Dockerfile作用是打一個(gè)python3項(xiàng)目環(huán)境

二、Dockerfile 編寫規(guī)則

指令到小寫不敏感,為了區(qū)分習(xí)慣上用大寫

Dockerfile 非注釋行第一行必須是 FROM

文件名必須是 Dockerfile

Dockerfile 指定一個(gè)專門的目錄為工作空間

所有引入映射的文件必須在這個(gè)工作空間目錄下

Dockerfile 工作空間目錄下支持隱藏文件(.dockeringore)

(.dockeringore)作用是用于存放不需要打包導(dǎo)入鏡像的文件,根目錄就是工作空間目錄

每一條指令都會(huì)生成一個(gè)鏡像層,鏡像層多了執(zhí)行效率就慢,能寫成一條指定的就寫成一條

三、Dockerfile 指令詳解

1.FROM:基礎(chǔ)鏡像

1.1、FROM是Dockerfile文件開篇第一個(gè)非注釋行代碼

2.MAINTAINER:鏡像作者信息

2.1、廢棄了,使用LABLE替代

3.LABLE:鏡像描述信息

3.1、LABLE author="haili"

4.COPY:從 Docker 宿主機(jī)復(fù)制文件至創(chuàng)建的新鏡像文件

4.1、COPY <src> <dest>

5.ADD:類似于 COPY 指令,ADD 支持 tar 文件和 URL 路徑

5.1、ADD <src> <dest>

6.WORKDIR:用于為 Dockerfile 中所有的 RUN、CMD、ENTRYPOINT、COPY、ADD 指定設(shè)定工作目錄

6.1、WORKDIR /mnt,如果目錄不存在會(huì)自動(dòng)創(chuàng)建,包括他的父目錄

7.VOLUME:數(shù)據(jù)卷,用于在 image 中創(chuàng)建掛載點(diǎn)目錄,以掛載 Docker host 上的卷或者其他容器上的卷

7.1、VOLUM mount_point

8.EXPOSE:為容器打開指定的監(jiān)聽端口以實(shí)現(xiàn)與外部通信

8.1、EXPOSE <port> </portocol>

9.ENV:用于為鏡像定義所需的環(huán)境變量,可以被 Dockerfile 文件中其他命令調(diào)用(ENV、ADD、COPY、RUN、CMD)

9.1、ENV key value

10.RUN:docker build 鏡像構(gòu)建的時(shí)候需要執(zhí)行的 shell 命令默認(rèn)"/bin/sh -c"運(yùn)行

10.1、docker build過程中需要執(zhí)行的命令

11.CMD:啟動(dòng)容器指定默認(rèn)要運(yùn)行的程序或命令,默認(rèn)"/bin/sh -c"運(yùn)行

11.1、docker run過程中需要執(zhí)行的命令

12.ENTRYPOINT:類型 CMD 指令的功能,用于為容器指定默認(rèn)運(yùn)行程序或命令

1、與CMD不同的是,由ENTRYPOINT啟動(dòng)的程序不會(huì)被docker run命令行指定的參數(shù)覆蓋,這些命令行參數(shù)會(huì)被當(dāng)做參數(shù)傳遞給ENTRYPOINT指定的程序

13.CMD 和 ENTRYPOINT 同時(shí)存在 Dockerfile 中

1、CMD的值會(huì)當(dāng)做參數(shù)傳遞給ENTRYPOINT

14.USER:指定運(yùn)行 image 時(shí)和 Dockerfile 中任何 RUN、CMD、ENTRYPOINT 指令指定的程序的用戶

1、使用用戶名或者UID

15.HEALTHCHECK:健康檢查,定義一個(gè)命令用于檢查主進(jìn)程工作狀態(tài)是否健康

15.1、HEALTHCHECK參數(shù)

16.SHELL:指定運(yùn)行 RUN、CMD、ENTRYPOINT 的 shell 程序

17.OPSIGNAL:給主進(jìn)程發(fā)送信號(hào)

18.ARG:docker build 過程中的參數(shù)

18.1、定義pyton鏡像作者,通過參數(shù)傳入

19.ONBUILD:用于在 Dockerfile 中定義一個(gè)觸發(fā)器

19.1、Dockerfile1中加一個(gè)ONBUILD add file,當(dāng)docker build -t=testpython Dockerfile1的時(shí)候ONBU

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容