,我們已經(jīng)說(shuō)了RUN、FROM、MAINTAINER、EXPOSE等一些DockerFile的相關(guān)命令,今天我們來(lái)看DockerFile的其他命令介紹。
CMD命令用于指定一個(gè)容器啟動(dòng)的時(shí)候需要運行的命令。它和RUN指令有點(diǎn)類(lèi)似,但是不同之處在于:
RUN指令是鏡像被構建的時(shí)候,需要執行的命令;
CMD指令是指定容器被啟動(dòng)的時(shí)候,要運行的指令。舉例:
docker run -it container_name /bin/ls
這個(gè)命令是我們啟動(dòng)一個(gè)容器,并且運行/bin/ls
它相當于我們手工進(jìn)入docker中執行ls命令。在DockerFile中可以使用下面的命令進(jìn)行代替:
CMD [ "/bin/ls" ]
需要注意的是,在DockerFile中只能指定一條CMD命令,即使我們指定了多條,也只有最后一條能被最終執行。
如果我們在DockerFile中使用了CMD指令,則docker run命令之后會(huì )直接運行CMD指令,例如:
docker run -it container_name
會(huì )在啟動(dòng)這個(gè)容器之后,直接運行/bin/ls命令。
這個(gè)命令和上面的CMD命令很像,不同之處在于,docker run命令后面指定的任何參數都會(huì )被當做參數再次傳遞給ENTRYPOINT指令中的命令。
WORKDIR指令用來(lái)在從鏡像創(chuàng )建一個(gè)新容器時(shí),在容器內部設置一個(gè)工作目錄。ENTRYPOINT或者CMD命令會(huì )在這個(gè)目錄下執行。
這條命令往往在DockerFile的最前面出現,為后續一系列的命令設置工作目錄。在指定完成某些命令之后,也可以通過(guò)這個(gè)命令來(lái)切換當前的目錄。所以,通常情況下,這個(gè)WORKDIR命令最常見(jiàn)的使用方法應該是下面這樣:
WORKDIR /data1/xxxxx RUN xxxxx RUN xxxxxx WORKDIR /data2/xxxxx RUN xxxxx RUN xxxxx
它是不斷切換目錄的一個(gè)工具。
如果我們在DockerFile中寫(xiě)明了目錄,但是在docker run的時(shí)候不想使用這個(gè)目錄應該怎么辦?
答案是使用docker run -w /var/dir1
使用-w參數之后,會(huì )使用/var/dir1來(lái)覆蓋我們DockerFile中的路徑。
ENV指令用來(lái)在生成DockerFile的過(guò)程中指定環(huán)境變量。例如:
ENV PYRHON_HOME /usr/bin/python
它可以跟上面的WORKDIR搭配起來(lái),例如:
ENV PYRHON_HOME /usr/bin/python WORKDIR $PYTHON_HOME
還可以在使用ENV命令生成的容器中,使用env命令,來(lái)查看當前容器的環(huán)境變量,便可以看到我們設置好的PYRHON_HOME的值。
除了這種方法之外,我們可以使用docker -e的命令來(lái)傳遞環(huán)境變量,但是這種方法傳遞的環(huán)境變量,只在運行的時(shí)候有效。
USER指令用來(lái)指定鏡像會(huì )以什么樣的用戶(hù)來(lái)執行。例如:
USER mysql
當然,還可以使用
USER user USER user:group USER uid USER uid:gid
有兩點(diǎn)需要注意:
1、可以使用docker run中的-u指令去覆蓋DockerFile中的USER選項;
2、如果不指定USER選項,則默認是root用戶(hù)
VOLUME指令用來(lái)向基于鏡像創(chuàng )建的容器添加卷。一個(gè)卷可以存在于一個(gè)或者多個(gè)容器內的特定目錄。這個(gè)目錄可以提供共享數據或者對數據進(jìn)行持久化的功能,例如:
1、卷可以在容器間共享和重用
2、一個(gè)容器不必和其他容器共享卷
3、對卷的修改是立即生效的
4、卷會(huì )一直存在,直到?jīng)]有任何容器需要他
這個(gè)功能可以讓我們將部分代碼或者數據添加到鏡像中,而不是提交到鏡像中。這樣會(huì )大大縮減鏡像的大小。它允許我們在多個(gè)容器間共享這些內容,所以VOLUME常常用來(lái)測試容器正確性。
VOLUME [ "/volume" ]
這條命令將會(huì )為使用此鏡像創(chuàng )建的容器創(chuàng )建一個(gè)名字為/volume的掛載點(diǎn)。
也可以使用數組的方式創(chuàng )建多個(gè)掛載點(diǎn):
VOLUME [ "/data1","/data2" ]
ADD命令用來(lái)將構建環(huán)境下的文件和目錄復制到鏡像中。ADD命令使用的過(guò)程中需要文件的源位置和目標位置,如下:
ADD aaa.txt /data1/aaa.txt
這條命令,會(huì )將鏡像構建目錄下的aaa.txt文件復制到鏡像中的/data1/aaa.txt 目錄下。源文件除了可以是構建環(huán)境上下文中的一個(gè)文件,也可以是一個(gè)URL。
在A(yíng)DD文件的過(guò)程中,如果目的地址是以/結尾,那么DockerFile會(huì )認為源位置是一個(gè)目錄,反之則認為源文件是一個(gè)文件。
還有一點(diǎn)需要注意:當源文件是一個(gè)本地歸檔文件的時(shí)候,例如tar.gz,則docker 會(huì )將其解壓到目標文件下。
COPY命令非常類(lèi)似于A(yíng)DD,和ADD的不同在于COPY不支持URL方法,也不會(huì )主動(dòng)去解壓文件,COPY指令的目的位置必須是容器內部的一個(gè)絕對路徑。
需要注意:
1、任何由該命令創(chuàng )建的文件或者目錄的UID和GID都會(huì )被設置成0
2、如果目的位置不存在,Docker將會(huì )自動(dòng)創(chuàng )建所有需要的目錄結構。就像mkdir -p那樣。
今天的內容就到這里吧,可能看著(zhù)比較干,后續我會(huì )補充案例,來(lái)對這些命令進(jìn)行說(shuō)明。
以上就是Dockerfile常用命令的使用簡(jiǎn)介的詳細內容,更多關(guān)于Dockerfile命令的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站