關於docker-Compose基本使用

四年發表於2019-01-31

本文首發於個人部落格:地址

簡介

Compose 是一個使用者定義和執行多個容器的 Docker 應用程式。在 Compose 中你可以使用 YAML 檔案來配置你的應用服務。然後,只需要一個簡單的命令,就可以建立並啟動你配置的所有服務。

使用 Compose 基本會有如下三步流程:

  • 在 Dockfile 中定義你的應用環境,使其可以在任何地方複製。
  • 在 docker-compose.yml 中定義組成應用程式的服務,以便它們可以在隔離的環境中一起執行。
  • 最後,執行dcoker-compose up,Compose 將啟動並執行整個應用程式。

安裝docker-Compose

目前有兩種主流安裝方式,筆者使用了第一種方式。

第一種

下載最新的docker-compose檔案

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
複製程式碼

下載完成後需要對/usr/local/bin/docker-compose目錄進行賦權

chmod +x /usr/local/bin/docker-compose
複製程式碼

測試結果

docker-compose --version
輸出
docker-compose version 1.16.1, build 6d1ac21
複製程式碼
第二種

通過pip方式安裝

pip install docker-compose
複製程式碼

前提是需要你的伺服器已經裝了pip元件

解除安裝

第一種

rm /usr/local/bin/docker-compose
複製程式碼

第二種

pip uninstall docker-compose
複製程式碼

使用

我們這裡以kafka為例

version: '2'

services:
  zoo1:
    # 依賴於wurstmeister/zookeeper映象,本地無則自動下載
    image: wurstmeister/zookeeper
    restart: unless-stopped
    hostname: zoo1
    # 對映埠
    ports:
      - "2181:2181"
    # 容器名稱
    container_name: zookeeper
  kafka1:
    # 依賴於wurstmeister/kafka映象
    image: wurstmeister/kafka
    # 對映埠
    ports:
      - "9092:9092"
    # 目錄掛載 【容器目錄:宿主機目錄】
    volumes:
      - /var/log/kafka/logs:/var/docker/kafka/logs
    # 配置環境變數
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181"
      KAFKA_BROKER_ID: 1
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_CREATE_TOPICS: "stream-in:1:1,stream-out:1:1"
    # 解決服務啟動順序問題,例如下面容器會先確定zoo1和redis兩個服務,最後才啟動kafka1服務
    depends_on:
      - zoo1
      - redis(實際無該容器)
    # 容器名稱
    container_name: kafka
複製程式碼

執行docker-compose

首先將docker-compos.yml上傳至伺服器,然後進入目錄執行:

docker-compose up -d
複製程式碼

則開始後臺構建服務

如果想單獨啟動一個服務,你可以:

docker-compose up -d 指定服務名稱

例子:docker-compose up -d zoo1
複製程式碼

服務排編案例

version: "3"
  services:
    # 指定服務名稱
    #服務註冊與發現中心
    simonEureka:
      image: simon/eureka-server:2.0.1-SNAPSHOT
      hostname: simonEureka
      ports:
        - "8100:8100"
    #配置中心    
    simonConfig:
      image: simon/config-server:2.0.1-SNAPSHOT
      hostname: simonConfig
      ports:
        - "8101:8101"
      depends_on:
        - simonEureka
      # always – 不管退出狀態碼是什麼始終重啟容器。當指定always時,docker daemon將無限次數地重啟容器。容器也會在daemon啟動時嘗試重啟,不管容器當時的狀態如何。
      # no – 容器退出時不要自動重啟。這個是預設值。
      # on-failure[:max-retries] – 只在容器以非0狀態碼退出時重啟。可選的,可以退出docker daemon嘗試重啟容器的次數。
      # unless-stopped - 不管退出狀態碼是什麼始終重啟容器,不過當daemon啟動時,如果容器之前已經為停止狀態,不要嘗試啟動它。
      restart: always
    #路由閘道器  
    apigateway:
      image: simon/apigateway:2.0.1-SNAPSHOT
      ports:
        - "8102:8102"
      depends_on:
        - simonEureka
        - simonConfig
      restart: always
    #監控平臺  
    admin:
      image: simon/admin:2.0.1-SNAPSHOT
      ports:
        - "8103:8103"
      depends_on:
        - simonEureka
        - simonConfig
      restart: always
--------------------- 
作者:AaronSimon 
來源:CSDN 
原文:https://blog.csdn.net/aaronsimon/article/details/82711610 
版權宣告:本文為博主原創文章,轉載請附上博文連結!
複製程式碼

這個時候我們伺服器simon目錄的檔案應該如下:

apigateway:2.0.1-SNAPSHOT.jar
admin:2.0.1-SNAPSHOT.jar
config-server:2.0.1-SNAPSHOT.jar
eureka-server:2.0.1-SNAPSHOT.jar
docker-compose.yml
複製程式碼

注意點

如果我們的yml檔案不是docker-compose.yml時我們在進行服務排編是需要指定yml檔名稱。

docker-compose -f docker-kafka.yml up -d
複製程式碼

當我們遇到服務啟動需要先後順序時,我們可以對docker-compose.yml根據服務的先後順序進行拆分。

常用的docker-compose命令

命令 描述
docker-compose up -d nginx 構建建啟動nignx容器
docker-compose exec nginx bash 登入到nginx容器中
docker-compose down 刪除所有nginx容器,映象
docker-compose ps 顯示所有容器
docker-compose restart nginx 重新啟動nginx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不啟動關聯容器,並容器執行php -v 執行完成後刪除容器
docker-compose build nginx 構建映象
docker-compose build --no-cache nginx 不帶快取的構建
docker-compose logs nginx 檢視nginx的日誌
docker-compose logs -f nginx 驗證(docker-compose.yml)檔案配置,當配置正確時,不輸出任何內容,當檔案配置錯誤,輸出錯誤資訊
docker-compose pause nginx 暫停nignx容器
docker-compose unpause nginx 恢復ningx容器
docker-compose rm nginx 刪除容器(刪除前必須關閉容器)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 啟動nignx容器

相關文章