Dockerfile詳解

ADD

ADD命令有兩個(gè)參數(shù),源和目標(biāo)。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復(fù)制文件到目標(biāo)容器的文件系統(tǒng)。如果源是一個(gè)URL,那該URL的內(nèi)容將被下載并復(fù)制到容器中。

COPY

格式為:COPY

復(fù)制本地主機(jī)的 (為 Dockerfile 所在目錄的相對(duì)路徑,文件或目錄) 為容器中的 。目標(biāo)路徑不存在時(shí),會(huì)自動(dòng)創(chuàng)建。當(dāng)使用本地目錄為源目錄時(shí),推薦使用 COPY。

RUN

RUN命令是Dockerfile執(zhí)行命令的核心部分。它接受命令作為參數(shù)并用于創(chuàng)建鏡像。不像CMD命令,RUN命令用于創(chuàng)建鏡像(在之前commit的層之上形成新的層)。有兩種方式:

1)RUN ? 例如:RUN sh -c 'source $HOME/.bashrc ; echo $HOME'

2)RUN ["executable", "param1", "param2"]? 例如:

一個(gè)Dockerfile中可以有多個(gè)RUN命令

CMD

和RUN命令相似,CMD可以用于執(zhí)行特定的命令。和RUN不同的是,這些命令不是在鏡像構(gòu)建的過(guò)程中執(zhí)行的,而是在Container啟動(dòng)時(shí)執(zhí)行的命令,一個(gè)Dockerfile中只能有一條CMD命令,多條則只執(zhí)行最后一條CMD。

3種執(zhí)行格式:

- `CMD ["executable","param1","param2"]` ,`exec`格式,推薦使用這種格式。例如:CMD ["java", "-jar", "spring-boot-maven-docker.jar"]

- `CMD ["param1","param2"]`,作為`ENTRYPOINT`的默認(rèn)參數(shù)。

- `CMD command param1 param2`,`shell`格式。

ENTRYPOINT

有兩種格式:

ENTRYPOINT [“executable”, “param1”, “param2”]

ENTRYPOINT command param1 param2 (shell 中執(zhí)行)

配置容器啟動(dòng)后執(zhí)行的命令,并且不會(huì)被 docker run 提供的參數(shù)覆蓋。而CMD則會(huì)

每個(gè) Dockerfile 中只能有一個(gè) ENTRYPOINT,當(dāng)指定多個(gè) ENTRYPOINT 時(shí),只有最后一個(gè)生效。例如:

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /userApp.jar" ]

ENV

ENV命令用于設(shè)置環(huán)境變量。這些變量以”key=value”的形式存在,會(huì)被后續(xù) RUN 指令使用,并在容器運(yùn)行時(shí)保持。

EXPOSE

EXPOSE用來(lái)指定端口,使容器內(nèi)的應(yīng)用可以通過(guò)端口和外界交互。

FROM

FROM命令可能是最重要的Dockerfile命令。該命令定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程?;A(chǔ)鏡像可以為任意鏡像。如果基礎(chǔ)鏡像沒有被發(fā)現(xiàn),Docker將試圖從Docker image index來(lái)查找該鏡像。FROM命令必須是Dockerfile的首個(gè)命令。

MAINTAINER

建議這個(gè)命令放在Dockerfile的起始部分,雖然理論上它可以放置于Dockerfile的任意位置。這個(gè)命令用于聲明作者,并應(yīng)該放在FROM的后面。

LABEL

key=value,可以多個(gè)。

USER

使用哪個(gè)用戶跑container。

VOLUME

可以將本地文件夾或者其他container的文件夾掛載到container中,用于讓你的容器訪問宿主機(jī)上的目錄。

WORKDIR

切換目錄用,可以多次切換(相當(dāng)于cd命令),對(duì)RUN,CMD,ENTRYPOINT生效。

【實(shí)例】

FROM node

RUN mkdir -p /home/nodejs/user ? //在鏡像中創(chuàng)建目錄

WORKDIR /home/nodejs/user //cd到鏡像中的目錄

COPY . /home/nodejs/user //拷貝本機(jī)中當(dāng)前目錄內(nèi)容到鏡像中目錄

RUN npm config set registry https://registry.npm.taobao.org? //設(shè)置鏡像中npm registry

RUN npm info underscore

RUN npm install? //鏡像中執(zhí)行npm install

RUN npm run build? //鏡像中執(zhí)行編譯

ENV NODE_EVN production? //設(shè)置鏡像中環(huán)境變量

ENV USER_ENV test

ENV USER_PORT 3200

ENV SVR_USER_API_BASE_URL http://test.user.com:8080

EXPOSE 3200

CMD ["npm", "start"]

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 0. 前言 docker是什么?docker是用GO語(yǔ)言開發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)???..
    sessionboy閱讀 3,993評(píng)論 2 49
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,996評(píng)論 1 21
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,728評(píng)論 0 120
  • 上師告訴我,發(fā)心就等于修行,發(fā)心過(guò)程中,難免會(huì)遇到質(zhì)疑,既然我們發(fā)了菩提心,就是為了如母眾生,舍棄自我,所以,不要...
    一路蓮花閱讀 738評(píng)論 0 0
  • 小時(shí)候 我有一方小小的天空 淺淺的 容不下太多憂愁 憂傷或是快樂 我都會(huì)望著它 快樂著所有的快樂 憂傷著全部的憂傷
    宗宣閱讀 143評(píng)論 0 3

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