回顾

WebApp业务上依赖第三方服务、容器外Redis服务、Sqlite数据库,可以想见我们会利用到 docker Volume机制和部分容器网络知识,

此处我们会以独立容器分别部署ASP.NETCore WebApp、Nginx容器,docker-compose 容器编排工具登场。

 

操作步骤

 

1. 准备应用程序部署文件

       利用dotnet publish CLI命令或者 WebDeploy工具生成部署文件,将部署文件拷贝到如下图示publish文件夹

复制代码
. ├── app │   ├── Dockerfile │   └── publish ├── applogs ├── docker-compose.yml ├── EqidManager.db └── nginx     ├── Dockerfile    └── nginx.conf
复制代码

 

2. 应用docker-compose 工具

         这次Docker设置将涉及两个独立的Docker容器,Docker Compose配置将两者连接在一起。
Docker Compose用于运行多容器Docker应用程序,通过docker-compose.yml文件,您可以配置多个应用程序容器,然后,您可以构建并运行容器集合(类似于单个容器的方式)。
         针对以上应用程序,在根目录下创建docker-compose.yml 文件:
复制代码
version: "3.4"  services:   app:     build:       context: ./app       dockerfile: Dockerfile     expose:       - "80"     extra_hosts:       - "dockerhost:172.18.0.1"     environment:       TZ: Asia/Shanghai      volumes:       - type: bind         source: /mnt/eqidmanager/eqidlogs         target: /app/eqidlogs       - type: bind         source: /home/huangjun/eqidmanager/applogs         target: /app/logs       - type: bind         source: /home/huangjun/eqidmanager/EqidManager.db         target: /app/EqidManager.db     healthcheck:       test: ['CMD','curl','-f','http://localhost/healthcheck']       interval: 1m30s       timeout: 10s       retries: 3       start_period: 6s   proxy:     build:       context: ./nginx       dockerfile: Dockerfile     ports:       - "80:80"     environment:       TZ: Asia/Shanghai     links:       - app
复制代码

 

这个配置定义了两个服务: app、nginx

  •  对于每个服务,【build】 告诉Docker Compose怎样为每个服务构建镜像

  • 【expose】和【ports】控制服务与 network bridge、宿主机交互的方式

  • 【links】表明链接另外的容器,意味着nginx启动的时会去启动app服务

  •  在本应用程序中有业务数据需要被持久化, 同时使用了Sqlite数据库,所以使用 【Volumes】来映射宿主机路径到 app 容器内路径

  • 本应用程序中因为涉及按小时生成业务日志文件,与本地时间有很大关联性,这里特意强调容器内外最好使用同一时区, 容器内默认时区可能与宿主机本地不符,使用【TZ】环境变量配置容器内时区

  • 应用程序在upload/201905251134545202.gif" alt="" style="border: 0px; vertical-align: middle; padding-right: 5px; max-width: 900px; height: auto;" /> View Code

      上面的Dockerfile 显示将publish 文件件下的部署文件拷贝进docker镜像, 配置容器在80端口监听请求