CentOS7+DockerCompose部署ASP.NET Core3.1應用


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同時編排兩個服務,服務名稱分別為saleservicewechatgatewayservicedocker 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

 

 

說明:

versiondocker-componse版本

container_name:容器名稱

context:打包的項目文件目錄

dockerfiledockerfile文件

ports:映射主機和容器的端口

description:說明信息(可以不要)

restart:重啟策略(可選值no、always、on-failureunless-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-apicdgift-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"

 

 

——本文為本人在技術預研和實際項目部署過程中所做的筆記,更多細節未一 一闡述,如有疑問可留言指正或共同學習探討。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM