簡體   English   中英

如何構建 docker 映像,其父文件夾作為工作目錄?

[英]How can I build a docker image with it parent folder as workdir?

這可能是一個愚蠢的問題,但我是 Docker 的新手,我對此感到很困惑。 我有一個包含許多子文件夾的項目,如下例所示:

project-folder:
       folder_1:
           code1.py
           Dockerfile
           requirements.txt
       folder_2:
           code2.py
           Dockerfile
           requirements.txt
       folder_data:
           file1
           file2
           file3

然后,我想這樣做:

  1. 在所有容器的project-folder中維護我的工作目錄;
  2. 在每個容器內,我應該能夠訪問folder_data - 我知道我必須指定一個卷,我只是不知道如何在不將我的project-folder保留為 workdir 的情況下執行此操作;
  3. 我需要將我的工作目錄( project-folder )傳遞給我的 code1.py

注意:只有在每個子文件夾中創建圖像時,我的圖像才會成功創建,例如 Dockerfile:

FROM python:3.6-slim
COPY . /folder_1
WORKDIR /folder_1
RUN pip install -r requirements.txt
CMD ["python3", "code1.py", "$(pwd)"]

圖像創建命令:

docker build -t image_folder1 .

我目前正在folder_1的上下文中創建圖像,因為我無法在project-folder的上下文中正確創建圖像

. docker build命令末尾的參數是上下文目錄 COPY到圖像中的任何內容都必須在此子樹中。 如果您需要在圖像中包含其直接子樹之外的內容,則需要使用祖先目錄作為構建上下文,但您可以使用docker build -f選項在子目錄中命名文件。

cd project-folder
docker build -t image_folder1 -f folder_1/Dockerfile .

在 Dockerfile 中,由於您從父目錄開始,您需要包含您COPY的任何文件的相對路徑; 但是,現在允許包含以前的同級目錄。

FROM python:3.6-slim
WORKDIR /app

# Good practice to copy just dependencies first; this helps
# layer caching when you repeat `docker build`.
# COPY source path is relative to the `docker build` directory,
# which we've set up to be the parent of the application source.
COPY folder_1/requirements.txt .
RUN pip install -r requirements.txt

# Now copy in the rest of the application
COPY folder_1 .

# And also copy the shared data
COPY folder_data ./folder_data

# And have ordinary container startup metadata
CMD ["./code1.py"]

不要在這里使用卷。 Docker 具有從圖像內容填充命名卷的誘人行為,但如果您重建舊卷內容將優先於更新的圖像內容,這僅適用於本機 Docker 卷(不是主機目錄綁定安裝,根本不是在 Kubernetes 中)。 擁有一個包含應用程序需要運行的所有內容的獨立映像比擁有需要從外部注入關鍵內容的部分映像更好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM