如何在 Docker 中更改目錄
一、概述
Docker 鏡像包含一組順序指令,用作構建容器的模板。在本教程中,我們將學習如何在構建 Docker 鏡像或使用鏡像運行容器時更改目錄。
2.使用WORKDIR
指令
首先,讓我們從使用現成的ubuntu:latest
映像生成 Docker 容器開始:
$ docker run -it ubuntu:latest
[email protected]:/# pwd
/
我們可以看到,容器一啟動,當前目錄就設置為/.
接下來,假設我們要在容器啟動時將此目錄更改為/tmp
。我們可以通過在使用ubuntu:latest
作為基礎鏡像的自定義鏡像中使用WORKDIR
指令來做到這一點:
$ cat custom-ubuntu-v1.dockerfile
FROM ubuntu:latest
WORKDIR /tmp
在我們可以使用這個鏡像運行一個容器之前,我們需要構建這個鏡像。因此,讓我們繼續構建custom-ubuntu:v1
映像:
$ docker build -t custom-ubuntu:v1 - < ./custom-ubuntu-v1.dockerfile
最後,讓我們使用custom-ubuntu:v1
鏡像運行一個容器並驗證當前目錄:
$ docker run -it custom-ubuntu:v1
[email protected]:/tmp# pwd
/tmp
看起來我們做對了!
3. 使用–workdir
選項
對於大多數我們想要在構建 Docker 映像時更改目錄的情況,建議使用WORKDIR
指令。然而,如果我們的用例僅限於在運行容器時更改目錄,那麼我們可以通過使用–workdir
選項來實現:
$ docker run --workdir /tmp -it ubuntu:latest
[email protected]:/tmp# pwd
/tmp
看看這個,我們可以欣賞到命令的簡潔性以及在這種情況下我們不必創建自定義圖像這一事實。
4. 使用cd
命令
在 Linux 中, cd
命令是大多數用例更改目錄的標準方法。同樣,當使用一些 docker 指令(例如RUN
、 CMD
和ENTRYPOINT
)時,我們可以使用cd
命令在上下文中更改當前命令的目錄。
讓我們首先編寫custom-ubuntu-v2.dockerfile
以使用RUN
指令和cd
命令:
FROM ubuntu:latest
RUN cd /tmp && echo "sample text" > data.txt
我們可以看到其意圖是將“示例文本”寫入/tmp/data.txt
文件。
接下來,讓我們添加ENTRYPOINT
指令以在容器啟動時將bash
作為默認命令運行。此外,我們使用cd
命令將當前目錄更改為/tmp
目錄:
ENTRYPOINT ["sh", "-c", "cd /tmp && bash"]
繼續,讓我們構建自定義圖像:
$ docker build -t custom-ubuntu:v2 - < ./custom-ubuntu-v2.dockerfile
最後,讓我們使用custom-ubuntu:v2
鏡像運行容器並驗證命令的執行:
$ docker run -it custom-ubuntu:v2
[email protected]:/tmp# pwd
/tmp
[email protected]:/tmp# cat /tmp/data.txt
random text
我們可以看到兩個更改目錄命令的結果都符合預期。此外,我們必須記住WORKDIR
仍然是推薦的方式。不過,對於簡單的用例,我們可以將cd
命令與RUN
、 ENTRYPOINT
或CMD
指令結合使用。
5. 結論
在本文中,我們學習了在使用 Docker 映像或啟動容器時更改目錄的不同方法。