共計 1593 個字符,預計需要花費 4 分鐘才能閱讀完成。
這篇文章主要為大家展示了“Linux 中 WORKDIR 指令怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Linux 中 WORKDIR 指令怎么用”這篇文章吧。
WORKDIR 指令用于聲明當前的工作目錄,以后各層的當前目錄就被改為指定的目錄。格式為 WORKDIR 工作目錄路徑。
如該目錄不存在,WORKDIR 會幫你建立目錄。再次強調!不要以為編寫 Dockerfiel 是在寫 shell 腳本。
下面是一個錯誤示例:
RUN cd /app
RUN echo hello world.txt
如果將這個 Dockerfile 進行構建鏡像運行后,會發現找不到 /app/world.txt 文件,或者其內容不是 hello。
原因其實很簡單,這兩行 RUN 命令的執行環境根本不同,是兩個完全不同的容器。這就是對 Dockerfile 構建分層存儲的概念不了解所導致的錯誤。
之前說過每一個 RUN 都是啟動一個容器、執行命令、然后提交存儲層文件變更。
兩行 RUN 分別構建了并啟動了各自全新的容器。
因此如果需要改變以后各層的工作目錄的位置,那么應該使用 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
插個小消息,也方便想學習的同學,在文章下方留言即可試聽課程外加領取千鋒 HTML5、UI 交互設計、PHP、Java+ 云數據、大數據開發、VR/AR/Unity 游戲開發、Python 人工智能、Linux 云計算、全棧軟件測試、網絡安全等全部的視頻學習教程。
COPY 指令
格式:
COPY 源路徑 … 目標路徑
COPY [源路徑 1 ,… 目標路徑]
和 RUN 指令一樣,也有兩種格式,一種類似于命令行,一種類似于函數調用。
目標路徑 可以是容器內的絕對路徑,也可以是相對于 WORKDIR 指定的工作目錄的相對路徑。目標路徑不需要事先創建,如果目錄不存在會在復制文件前先被創建。
COPY 指令將會從構建的上下文目錄中,把源路徑的文件或目錄復制到新的一層的鏡像內的 目標路徑 位置。比如:
COPY qf.json /usr/src/app/
注意下面是錯誤的
COPY qf.json /usr/src/app
這樣會把 qf.json 拷貝成為 /usr/src/ 目錄下的 app 文件
源路徑 可以是多個,支持通配符,如:
COPY qf* /app/
COPY q?.txt /app/
使用 COPY 指令,源文件的各種元數據都會保留。
比如讀、寫、執行權限、文件變更時間等。
ADD 指令
ADD 指令和 COPY 的格式和性質基本一致。但是在 COPY 基礎上增加了一些功能。
支持自動解壓縮,壓縮格式支持:gzip, bzip2 以及 xz
官方推薦使用 COPY 進行文件的復制。
ADD 指定會使構建鏡像時的緩存失效,導致構建鏡像的速度很慢。
COPY 和 ADD 指令中選擇的原則,所有的文件復制均使用 COPY 指令,僅在需要自動解壓縮的場合使用 ADD。
ADD qf.tar.gz /
USER 指令
USER 則是改變執行 RUN, CMD 以及 ENTRYPOINT 這類命令的身份。
這個用戶必須是事先在容器內存在 (建立好) 的,否則無法切換。
如果以 root 執行的腳本,在執行期間希望改變身份,比如希望以某個已經建立好的用戶來運行某個服務進程,不要使用 su 或者 sudo,這些都需要比較麻煩的配置,而且在 TTY 缺失的環境下經常出錯。建議使用 gosu。
以上是“Linux 中 WORKDIR 指令怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!