簡體   English   中英

如何將帶有 docker-compose 的多個 docker 圖像推送到 docker 集線器?

[英]How to push multiple docker images with docker-compose to docker hub?

I have several images and services in my docker-compose file, For creating a PHP, Apache, MySql, and PHPMyAdmin environment to run my website. 誰能幫助我如何在 Docker Hub 上推送我的所有圖像或使用我的網站代碼創建環境?

Dockerfile

FROM php:7.4-apache
RUN docker-php-ext-install mysqli

docker-compose.yml

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  phpmyadmin:
      image: phpmyadmin
      restart: always
      ports:
        - 8080:80
      environment:
         - PMA_ARBITRARY=1

index.php 和我在src文件夾中的所有網站代碼

了解可以推送到 Docker 集線器的內容非常有用。 Docker Hub will contain Docker images, but it can't host data content, the docker-compose.yml file itself, or anything else that's not a Docker image. 您使用的兩個支持容器都使用標准 Docker Hub 映像。 因此,您需要使您的php容器自包含,將其推送到 Docker 集線器,然后手動將docker-compose.yml文件復制到您將運行它的地方。

刪除對本地系統的依賴。 除了復制 Docker 容器外,您通常不想復制應用程序源代碼。 docker-compose.yml文件中,刪除將本地系統源代碼掛載到容器中的volumes:將其替換為將其復制到映像中的 Dockerfile 行:

COPY ./src/ /var/www/html/

這不會是一個實時的開發環境,沒關系。

命名您的 Docker 集線器圖像。 您可以在docker-compose.yml文件中同時擁有build:image:行。 如果你這樣做,它指定了構建圖像的名稱(而不是讓 Compose 選擇它)。 這應該給你留下:

services:
  php:
    build: .  # with default Dockerfile
    image: myname/myapp
    ports:
      - '80:80'
    # no volumes:
  db: # as above
  phpmyadmin: # as above

構建和測試。 您應該可以進行此設置; docker-compose down -v清理所有本地工件; docker-compose build鏡像,然后docker-compose up啟動它。 執行您需要的任何手動測試,以及您構建的任何自動化端到端測試。

推送圖片。

docker-compose push php

在其他地方運行它。 您需要docker-compose.yml文件,但不需要任何其他工件。 當您在另一台機器上運行docker-compose up ,它會拉取本地沒有的任何圖像。 (如果是私有鏡像,可能需要docker login 。)

scp docker-compose.yml there:
ssh root@there docker-compose up -d

數據庫內容。 您的docker-compose.yml文件沒有聲明volumes:存儲數據庫數據; 這可能會導致重新啟動時數據丟失。 但是,您也不能將這些卷推送到 Docker 集線器。 您可以在本地系統上備份您的數據庫並在遠程系統上恢復它; 或者,您可以在應用程序啟動過程中運行數據庫遷移和播種腳本。 數據需要與代碼(圖像)和部署機制(Compose)分開處理。

暫無
暫無

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

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