本文首發於個人部落格:地址
簡介
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容器 |