溫馨提示×

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

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

Linux中WORKDIR指令怎么用

發(fā)布時(shí)間:2021-11-20 17:22:36 來(lái)源:億速云 閱讀:784 作者:小新 欄目:云計(jì)算

這篇文章主要為大家展示了“Linux中WORKDIR指令怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux中WORKDIR指令怎么用”這篇文章吧。

WORKDIR 指令用于聲明當(dāng)前的工作目錄,以后各層的當(dāng)前目錄就被改為指定的目錄。格式為 WORKDIR <工作目錄路徑>。

如該目錄不存在,WORKDIR 會(huì)幫你建立目錄。再次強(qiáng)調(diào)!不要以為編寫(xiě) Dockerfiel 是在寫(xiě) shell 腳本。

下面是一個(gè)錯(cuò)誤示例:

RUN cd /app

RUN echo "hello" > world.txt

如果將這個(gè) Dockerfile 進(jìn)行構(gòu)建鏡像運(yùn)行后,會(huì)發(fā)現(xiàn)找不到 /app/world.txt 文件,或者其內(nèi)容不是 hello。

原因其實(shí)很簡(jiǎn)單,這兩行 RUN 命令的執(zhí)行環(huán)境根本不同,是兩個(gè)完全不同的容器。這就是對(duì) Dockerfile 構(gòu)建分層存儲(chǔ)的概念不了解所導(dǎo)致的錯(cuò)誤。

之前說(shuō)過(guò)每一個(gè) RUN 都是啟動(dòng)一個(gè)容器、執(zhí)行命令、然后提交存儲(chǔ)層文件變更。

兩行 RUN 分別構(gòu)建了并啟動(dòng)了各自全新的容器。

因此如果需要改變以后各層的工作目錄的位置,那么應(yīng)該使用 WORKDIR 指令。

FROM alpine

WORKDIR /a/b

RUN touch a_b_f.txt

WORKDIR /a

RUN touch a_f.txt

[root@localhost workdir]# docker run -it alpine:workdir /bin/sh

/a # ls

a_f.txt b

/a # cd b

/a/b # ls

a_b_f.txt

Linux中WORKDIR指令怎么用

插個(gè)小消息,也方便想學(xué)習(xí)的同學(xué),在文章下方留言即可試聽(tīng)課程外加領(lǐng)取千鋒HTML5、UI交互設(shè)計(jì)、PHP、Java+云數(shù)據(jù)、大數(shù)據(jù)開(kāi)發(fā)、VR/AR/Unity游戲開(kāi)發(fā)、Python人工智能、Linux云計(jì)算、全棧軟件測(cè)試、網(wǎng)絡(luò)安全等全部的視頻學(xué)習(xí)教程。

COPY 指令

格式:

  • COPY <源路徑>... <目標(biāo)路徑>

  • COPY ["<源路徑1>",... "<目標(biāo)路徑>"]

和 RUN 指令一樣,也有兩種格式,一種類(lèi)似于命令行,一種類(lèi)似于函數(shù)調(diào)用。

<目標(biāo)路徑> 可以是容器內(nèi)的絕對(duì)路徑,也可以是相對(duì)于 WORKDIR 指定的工作目錄的相對(duì)路徑。目標(biāo)路徑不需要事先創(chuàng)建,如果目錄不存在會(huì)在復(fù)制文件前先被創(chuàng)建。

COPY 指令將會(huì)從構(gòu)建的上下文目錄中,把源路徑的文件或目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置。比如:

COPY qf.json /usr/src/app/

注意下面是錯(cuò)誤的

COPY qf.json /usr/src/app

這樣會(huì)把 qf.json 拷貝成為 /usr/src/ 目錄下的 app 文件

<源路徑> 可以是多個(gè),支持通配符,如:

COPY qf* /app/

COPY q?.txt /app/

使用 COPY 指令,源文件的各種元數(shù)據(jù)都會(huì)保留。

比如讀、寫(xiě)、執(zhí)行權(quán)限、文件變更時(shí)間等。

Linux中WORKDIR指令怎么用

ADD 指令

ADD 指令和 COPY 的格式和性質(zhì)基本一致。但是在 COPY 基礎(chǔ)上增加了一些功能。

支持自動(dòng)解壓縮,壓縮格式支持: gzip, bzip2 以及 xz

官方推薦使用 COPY 進(jìn)行文件的復(fù)制。

ADD 指定會(huì)使構(gòu)建鏡像時(shí)的緩存失效,導(dǎo)致構(gòu)建鏡像的速度很慢。

COPY 和 ADD 指令中選擇的原則,所有的文件復(fù)制均使用 COPY 指令,僅在需要自動(dòng)解壓縮的場(chǎng)合使用 ADD。

ADD qf.tar.gz /

USER 指令

USER 則是改變執(zhí)行 RUN, CMD 以及 ENTRYPOINT 這類(lèi)命令的身份。

這個(gè)用戶(hù)必須是事先在容器內(nèi)存在(建立好)的,否則無(wú)法切換。

如果以 root 執(zhí)行的腳本,在執(zhí)行期間希望改變身份,比如希望以某個(gè)已經(jīng)建立好的用戶(hù)來(lái)運(yùn)行某個(gè)服務(wù)進(jìn)程,不要使用 su 或者 sudo,這些都需要比較麻煩的配置,而且在 TTY 缺失的環(huán)境下經(jīng)常出錯(cuò)。建議使用 gosu。

以上是“Linux中WORKDIR指令怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

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

AI