在同一个目录下创建下面3个文件
Dockerfile
用于构建aspnet镜像
通用镜像,可以通过传入指定的dll名称来启动对应的程序
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
EXPOSE 80
#解决admin.net框架内导出excel需要用到libgdiplus的问题,就是要安装这个插件
RUN apt-get update -y
RUN apt-get install -y libgdiplus
RUN apt-get clean
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
#解决docker时区差8个小时的问题
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
#定义环境变量
ENV DLLNAME=""
COPY . .
#改用CMD来执行dotnet应用程序,使用动态传入的DLLNAME参数
CMD dotnet $DLLNAME
创建镜像
docker build -t aspnet7:1.0 .
.env
环境变量文件
格式参照下面的例子:
CONTAIONER_PREFIX=abp.microservice.
BASIC_PATH=/home/abp.microservice/
ASPNET7_IMAGE=aspnet7:1.0
docker-compose.yml
- 使用.env文件里的变量,默认使用的文件就是.env,如果要更改env文件名称则要在yml里写env文件引入
- yml里通过${变量名称}来使用
- 给变量设置默认值:${name:-sakura} 表示如果env中没有找到名字叫name的变量,则默认为sakura
- 注意:yml里的键值对后面的冒号后面要紧跟一个空格
version: '3.6'
services:
frontend:
image: nginx:latest
container_name: ${CONTAIONER_PREFIX}frontend
restart: always
volumes:
- "${BASIC_PATH}frontend/conf/nginx:/etc/nginx"
- "${BASIC_PATH}frontend/logs/:/var/log/nginx"
- "${BASIC_PATH}frontend/www/:/usr/share/nginx/html"
ports:
- '80:80'
networks:
- network.bridge
base:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}baseService
restart: always
volumes:
- "${BASIC_PATH}BaseService:/app"
environment:
DLLNAME: "BaseService.Host.dll"
ports:
- '55389:80'
networks:
- network.bridge
auth:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}authserver
restart: always
volumes:
- "${BASIC_PATH}AuthServer:/app"
environment:
DLLNAME: "AuthServer.Host.dll"
ports:
- '53362:80'
networks:
- network.bridge
business:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}business
restart: always
volumes:
- "${BASIC_PATH}Business:/app"
environment:
DLLNAME: "Business.Host.dll"
ports:
- '51186:80'
networks:
- network.bridge
webappgateway:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}webappgateway
restart: always
volumes:
- "${BASIC_PATH}WebAppGateway:/app"
environment:
DLLNAME: "WebAppGateway.Host.dll"
ports:
- '62162:80'
networks:
- network.bridge
filestorage:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}filestorage
restart: always
volumes:
- "${BASIC_PATH}FileStorage:/app"
environment:
DLLNAME: "FileStorage.Host.dll"
ports:
- '59958:80'
networks:
- network.bridge
internalgateway:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}internalgateway
restart: always
volumes:
- "${BASIC_PATH}InternalGateway:/app"
environment:
DLLNAME: "InternalGateway.Host.dll"
ports:
- '59682:80'
networks:
- network.bridge
openiddict:
image: ${ASPNET7_IMAGE}
container_name: ${CONTAIONER_PREFIX}openiddict
restart: always
volumes:
- "${BASIC_PATH}OpenIddict:/app"
environment:
DLLNAME: "AuthServer.dll"
ports:
- '53363:80'
networks:
- network.bridge
networks:
network.bridge:
运行docker-compose
#-d表示后台运行
docker-compose up -d
#解析并打印出yml文件内容
docker-compose config
#合并多个yml文件,用于多个环境部署等情况
docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml up