Docker Certified Associate(DCA)認證考試學習-WORKDIR and USER Docker Certified Associate(DCA)認證相關資源、WORKDIR and USER

Published on Thursday, February 23, 2023

Docker WORKDIR

在Dockerfile中WORKDIR也是相當常用的指令
首先來看看WORKDIR文檔

WORKDIR /path/to/workdir

WORKDIR指令是用來設定RUN, CMD, ENTRYPOINT, COPYADD這些指令的工作目錄
如果沒有設定 WORKDIR 那麼預設會在根目錄 /

先來做個簡單的測試

mkdir workdir && cd $_
vi Dockerfile
#Dockerfile
FROM alpine
docker build -t workdirimage .
docker run -dit workdirimage 

我們在這邊建立了一個空的alpine image,現在我們使用 docker attach 附加進去容器內部 目前container的工作目錄為根目錄

[node1] (local) root@192.168.0.13 ~/workdir
$ docker attach 5b6f
/ # 

那麼我們來修改一下Dockerfile新增一個 WORKDIR,在重新運行一個container試試看

#Dockerfile
FROM alpine
WORKDIR /usr
WORKDIR bin

發現我們的工作目錄已經被設定/usr/bin底下了

docker build -t workdirimage .
docker run -dit workdirimage 
[node1] (local) root@192.168.0.13 ~/workdir
$ docker attach bff
/usr/bin # 

這邊要注意一下絕對路徑跟相對路徑的寫法
如果是像範例那樣有寫相對路徑,則結果會去參考前一個 WORKDIR
如果路徑為不存在的資料夾,則結果會建立一個新的資料夾

如果沒有設定WORKDIR則會去參考依賴的image有沒有設定
所以為了避免被父層的image干擾,最好是建立自己的image時都要設定WORKDIR


Docker USER

WORKDIR很相像,WORKDIR是用來設定工作目錄
USER則是用來設定container該使用哪個使用者和群組 並且會影響RUN, CMDENTRYPOINT 這些指令的使用者與群組

簡單來說USER指令是用來切換container內部的使用者和群組,需要注意跟我們HOST的使用者與群組不相關
因為USER指令是用來切換container內部的使用者,所以要切換前必須要預先建立好否則切換會報錯

接下來測試看看 這邊我們建立了一個新的user叫做 user,並且加入到 user 群組

FROM ubuntu
RUN groupadd -r user && useradd -r -g user user
USER user
docker build -t usertest .
docker run -dit usertest

可以看到目前登入的使用者變成是user

[node1] (local) root@192.168.0.28 ~/workdir
$ docker attach eda0c
user@eda0c9bc62e6:/$ id
uid=999(user) gid=999(user) groups=999(user)

Summary

今天學習了如何設定container的使用者與工作目錄
WORKDIR設定工作目錄
USER設定使用者
其中 WORKDIR 在搭配COPYRUN運行指令時非常方便 之後可以多加使用