在查看了關于如何命名 Dockerfiles的答案后,我仍然有很多問題。
就我而言,我至少需要兩個Dockerfiles, adocker-compose.yaml和 a .dockerignore。聽起來像使用擴展程式,例如<purpose>.Dockerfile或Dockerfile.<purpose>具有失去在 hub.docker.com 上使用 autobuilder 的功能的缺點。
所以其他人建議你把每個Dockerfile放在一個目錄中并從那里構建。
所以也許是這樣的:
dockerfiles/
--python_consumer/
-----Dockerfile
--python_producer/
-----Dockerfile
--docker-compose.yaml
--.dockerignore
在這種情況下, .dockerignore 會在所有 dockerfiles 全域作業嗎?以這種方式構建有什么大的缺點嗎?
我的示例 docker-compose.yaml 沒有單獨的目錄和一個組合的消費者/生產影像作為背景關系。
version: '3.8'
services:
standalone:
hostname: standalone
container_name: standalone
image: apachepulsar/pulsar:2.8.1
ports:
- 8080:8080 # exposed would be a better practice
- 6650:6650 # exposed would be a better practice
command: bin/pulsar standalone
healthcheck:
test: ["CMD", "nc", "-vz", "localhost", "6650"]
interval: 20s
timeout: 5s
retries: 5
networks:
- conprod
conprod:
hostname: conprod
container_name: conprod
build:
context: .
dockerfile: ./Dockerfile
restart: on-failure # best practice is probably "unless-stopped"
depends_on:
- standalone
networks:
- conprod
networks:
conprod:
uj5u.com熱心網友回復:
當你構建一個鏡像時,你會向 Docker 守護行程發送一個構建背景關系;在您的 Compose 設定中,這是在build: { context: }設定中命名的目錄。該.dockerignore檔案必須在該確切目錄中,而不能在其他任何地方。它的實際效果是導致檔案被排除在構建背景關系之外,這可以導致更快的構建序列。
構建背景關系的另一個重要影響是所有 DockerfileCOPY指令都被認為是相對于該目錄的;您不能COPY來自父目錄或兄弟目錄。因此,如果檔案在專案之間共享,則必須將背景關系目錄設定為將包含的所有檔案的某個祖先目錄,并且COPY指令將相對于該目錄(即使 Dockerfile 位于每個專案的目錄中)。另請參閱如何在 Docker 的構建背景關系之外包含檔案?
如果您的專案是完全獨立的:可能有一個前端和一個后端專案,或者在您的情況下,生產者和消費者共享一種訊息格式但沒有任何實際代碼。那么在這種情況下:
Dockerfile在每個專案子目錄中放置一個 Dockerfile,準確命名.dockerignore在每個專案子目錄下放一個檔案(不能在父目錄下)COPY指令是相對于專案子目錄的COPY requirements.txt ./- 在 Compose 檔案中,您可以使用速記
build: directory語法,因為您擁有標準(默認)dockerfile:名稱version: '3.8' services: producer: build: ./python_producer environment: - RABBITMQ_HOST=rabbitmq consumer: build: ./python_consumer environment: - RABBITMQ_HOST=rabbitmq rabbitmq: image: rabbitmq:3 hostname: rabbitmq # RabbitMQ is very unusual in needing to set this
如果您的專案共享代碼或其他檔案:在您的示例中,您可能為共享代碼中的訊息格式定義了 Python 資料結構。在這種情況下:
Dockerfile在每個專案子目錄中放置一個 Dockerfile,準確命名- 將單個
.dockerignore檔案放在專案根目錄中 COPY指令是相對于專案根目錄的COPY python_producer/requirements.txt ./- 在 Compose 檔案中,您需要指定
context: .并dockerfile:指向每個組件的 Dockerfileversion: '3.8' services: producer: build: context: . dockerfile: python_producer/Dockerfile environment: - RABBITMQ_HOST=rabbitmq consumer: build: context: . dockerfile: python_consumer/Dockerfile environment: - RABBITMQ_HOST=rabbitmq rabbitmq: image: rabbitmq:3 hostname: rabbitmq # RabbitMQ is very unusual in needing to set this
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312803.html
標籤:码头工人 docker-compose 文件 命名约定
