Compose 簡介
Compose 是用於定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。
本文將介紹如何使用docker-compose編排多個服務。
安裝docker-compose前需要安裝docker,安裝方法可參考另一篇文章《Centos7+Docker部署.NetCore3.1應用》
一.安裝Docker-Compose
官方源安裝
命令:curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
其他源安裝 (官方的下載太慢了,用下面的源)
命令:curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改目錄可執行權限(不然后續docker-compose up命令會報錯)
命令:sudo chmod +x /usr/local/bin/docker-compose
查看docker compose版本
命令:docker-compose --version
二.添加docker-compose.yml文件和Dockerfile文件
這里我們將使用docker-compose同時編排兩個服務,服務名稱分別為saleservice和wechatgatewayservice,docker compose使用項目文件中添加的Dockerfile配置來創建容器。
在/data/docker-compose/Release目錄中添加一個docker-compose.yml文件(docker-compose文件使用YAML語言編寫,一定要注意縮進,兩個服務的縮進保持一致)——建議先閱讀《YAML入門教程》
docker-compose.yml文件內容
version: '3'
services:
saleservice:
container_name: cdgift-saleservice
build:
context: ./saleService/app
dockerfile: Dockerfile
ports:
- '31320:31320'
labels:
description: "This sale service"
restart: on-failure
wechatgatewayservice:
container_name: cdgift-wechatgatewayservice
build:
context: ./wechatGatewayService/app
dockerfile: Dockerfile
ports:
- '31380:31380'
labels:
description: "This wechat gateway service"
restart: on-failure
說明:
version:docker-componse版本
container_name:容器名稱
context:打包的項目文件目錄
dockerfile:dockerfile文件
ports:映射主機和容器的端口
description:說明信息(可以不要)
restart:重啟策略(可選值no、always、on-failure、unless-stopped),建議選擇always
no:是默認的重啟策略,在任何情況下都不會重啟容器。
always:容器總是重新啟動。
on-failure:在容器非正常退出時(退出狀態非0),才會重啟容器。
unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
注意:我們這里的Dcokerfile文件放在/wechatGatewayService/app和/saleService/app目錄中
saleService/app/Dcokerfile文件內容:
wechatGatewayService/app/Dockerfile文件內容:
將兩個項目文件上傳到在/data/docker-compose/Release目錄中,如下如:
三.用docker-compose啟動容器
命令:docker-compose up --build
這里我們可以看到創建並啟動了兩個容器分別為cdgift-sale-api和cdgift-wechat-gateway,並且看到cdgift-wechat-gateway服務監聽31380端口
接着就可以訪問31380端口的服務(如果服務器開了防火牆,記得先開啟防火牆端口)
四.其他命令
停止正在運行的容器
docker stop 容器名稱/容器ID
啟動停止的容器:
docker start 容器名稱/容器ID
查詢創建的容器:
docker-compose ps
刪除指定容器:
docker rm 容器名稱/容器ID
刪除所有容器:
docker rm $(docker ps -aq)
查詢所有鏡像:
docker ps -a
刪除鏡像:
docker image rm鏡像名稱/鏡像ID
刪除所有鏡像:
docker rmi $(docker images -q)
docker-compose命令詳細參考
命令:docker-compose -h
五.附上一個真實項目的部署案列供參考(與本文只是目錄結構不同,所以配置內容略有不通)
系統目錄結構如圖:
Dockerfile文件內容:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
MAINTAINER PDF
LABEL description="CDGift.Sale.Service"
LABEL version="1.0"
WORKDIR /app
COPY . .
EXPOSE 31320
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV ASPNETCORE_ENVIRONMENT Production
ENTRYPOINT ["dotnet","CDGift.SaleDomain.WebApi.dll"]
docker-compose.yml文件內容:
version: '3'
services:
cdgift-sale-api:
build:
context: $PWD/../build/files
dockerfile: $PWD/../build/Dockerfile
container_name: cdgift-sale-api
hostname: cdgift-sale-api
restart: always
network_mode: "bridge"
ports:
- "31320:31320"
environment:
TZ: "Asia/Shanghai"
——本文為本人在技術預研和實際項目部署過程中所做的筆記,更多細節未一 一闡述,如有疑問可留言指正或共同學習探討。