我有一個關于 DockerHub 和 GitHub 的一般性問題。我正在嘗試使用 AWS 實體在 Jenkins 上構建管道,我的最終目標是部署docker-compose.yml我在 GitHub 上的存盤庫所具有的:
version: "3"
services:
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_HOST: db
我讀過在 CI/CD 管道中人們構建他們的影像并將它們推送到 DockerHub,但它的意義何在?
您將只是推送單個影像。即使您稍后在不同的實體中拉取影像,為了使用不同的服務運行應用程式,您將需要使用運行容器docker-compose并且除非您再次從 github 存盤庫中拉取它或創建它,否則您將無法擁有它管道對嗎?
docker-compose從 Github 獲取 repo 并執行命令不是更好更直接嗎?有沒有“更清潔”或“正確”的方法?提前致謝!
uj5u.com熱心網友回復:
您唯一需要復制到遠程系統的是檔案docker-compose.yml。即使這在技術上也是可選的,因為 Compose 只是包裝了基本的 Docker 命令;您可以手動docker network create然后docker run兩個容器,而無需復制任何內容。
對于此設定,洗掉volumes:需要應用程式代碼副本以覆寫影像內容的內容很重要。您也不應該需要 override command:。對于部署,您需要替換build:為image:.
version: "3.8"
services:
db: *from-the-question
web:
image: registry.example.com/me/web:${WEB_TAG:-latest}
ports:
- "3000:3000"
depends_on:
- db
environment: *web-environment-from-the-question
# no build:, command:, volumes:
在 Compose 設定中,您可以將build:docker-compose.override.yml配置放在不會復制到部署系統的并行檔案中。
所以呢?以這種方式構建事物有幾個很好的理由。
一個前瞻性的答案涉及集群容器管理器,如 Kubernetes、Nomad 或亞馬遜專有的 ECS。在這些容器中,容器在無法區分的機器集群中的某個地方運行,而您必須復制應用程式代碼的唯一方法是從注冊表中提取它。在這些設定中,您不會在任何地方復制任何檔案,而是向集群管理器發出指令,指示應該在某處運行一定數量的映像副本。
另一個很好的理由是支持回滾應用程式。在上面的 Compose 片段中,我指的是環境變數${WEB_TAG}。假設您每天推出一個構建并給每個構建一個帶有日期戳的標簽;registry.example.com/me/web:20220220. 但是,今天的構建出了點問題!當您弄清楚時,您可以連接到部署機器并運行
WEB_TAG=20220219 docker-compose up -d
并立即回滾,無需嘗試簽出任何內容或復制應用程式。
通常,使用 Docker,您希望使映像盡可能自包含,盡管仍然承認存在無法“烘焙”的資料庫憑據之類的東西。所以請確保COPY在代碼中,不要用 覆寫代碼volumes:,設定一個 sensible CMD。您應該能夠從一個只安裝了 Docker 而沒有其他任何東西的干凈系統開始,并且docker run該映像只安裝了與 Docker 相關的設定。您可以想象撰寫一個 shell 腳本來運行docker命令,而該docker-compose.yml檔案只是它的宣告版本。
最后請記住,您不必使用Docker。您可以使用 Ansible、Salt Stack 或 Chef 等通用系統管理工具將 Ruby 安裝到目標機器上并手動復制代碼。這是一種經過充分驗證的部署方法。我發現 Docker 更簡單,但假設代碼及其所有依賴項實際上都在映像中,不需要單獨復制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429182.html
