簡體   English   中英

使用docker-compose在服務器上構建多容器docker映像

[英]Building multi-container docker image on server with docker-compose

我正在處理一個多服務的docker映像,該映像在本地運行良好,但是在服務器端構建它時遇到了麻煩(可能是知識鴻溝)。 一種服務正在運行我的mysql數據庫,另一種服務是我的主應用程序(每個應用程序都有自己的Dockerfile,盡管我認為這是給定的),兩者均通過docker-compose鏈接並使用depends_on首先運行安裝mysql並確保其處於正常狀態。

我已經成功在本地構建和運行映像,並在推送到docker hub后將其拉到服務器,但是找不到有關如何在生產中正確使用docker-compose.yml文件的指導。 我花了一段時間才意識到我需要將docker-compose文件單獨上傳到生產環境,但是現在我對“ build”設置感到困惑。

在本地,我正在使用類似於以下文件的docker-compose.yml文件,其“ build”設置指向項目目錄中的db_config文件夾。

version: '2.1'
services:
    mysql:
        image: username/my_image:latest
        container_name: db
        build: ./db_config
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_USER: "dbuser"
            MYSQL_PASSWORD: "12345"
            MYSQL_DATABASE: "my_db"
        healthcheck:
            test: "exit 0"

    my_app:
        container_name: app
        build: .
        depends_on:
            mysql:
                condition: service_healthy
        entrypoint:
            - /usr/local/bin/docker-entrypoint.sh
        ports:
            - "80:8080"

嘗試在生產中使用此文件進行構建( docker-compose build )會產生以下錯誤(名稱更改):

構建路徑/ home / user / my_app / db_config不存在,不可訪問或不是有效的URL。

生產中“構建”應該指向什么? 我應該以某種方式指向Docker映像本身中的Dockerfile,還是該配置在生產中完全不同? 是否還有其他配置需要更改?

事實是,您不應該為生產構建docker映像。

通常的設置是構建可在多種環境下運行的映像。 在UAT上,您可以測試此映像,如果還可以,則使生產環境停止當前容器,然后根據新映像啟動新容器。

要存儲圖像,您可以使用docker Registry。

至於您的錯誤,是因為您執行docker-compose build的機器上沒有db_config文件而發生。 與將撰寫文件上傳到生產環境類似,為了在生產環境上構建映像,您需要提供構建所需的所有必要項目文件。

如果要使其“干凈”,則正確的方法是在構建環境中構建映像,將映像推送到注冊表,然后在生產環境中進行部署。

是的,對於生產部署,您需要撰寫文件。 但是,您不需要進行構建。 如果可以訪問Docker注冊表,則應先停止正在運行的容器,然后再次啟動它們。

如果您對swarm進行操作,應該會更容易,因為swarm會檢查容器是否具有較新的映像庫,並且僅在需要映像更新時才停止它們。

暫無
暫無

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

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