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同时编排两个服务,服务名称分别为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"
——本文为本人在技术预研和实际项目部署过程中所做的笔记,更多细节未一 一阐述,如有疑问可留言指正或共同学习探讨。