docker-compose是个好东西,越用越香
回顾
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 Compose用于运行多容器Docker应用程序,通过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端口监听请求