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"

——本文为本人在技术预研和实际项目部署过程中所做的笔记,更多细节未一 一阐述,如有疑问可留言指正或共同学习探讨。