使用docker-compose搭建AspNetCore开发环境

1 使用docker-compose搭建开发环境

我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了。

首先使用Nginx代理所有的Web程序,这样只需要在主机上监听一个端口就可以了,不污染主机。再组合各Web程序、Redis/Memcached、SqlServerOnLinux。
新建一个目录sites,所有和集群相关的都放在这里,目录结构如下所示

sitesnginxsites-enableddefaultDockerfileredisDockerfileredis.confdocker-compose.yml

新建docker-compose.yml


version: "2"

services:

    redis:

        build: ./redis/

        restart: always

        container_name: mac-redis 

    identity:

        build: ~/identity/src/Web/  #identity项目的Dockerfile所在的目录

        restart: always

        volumes:

            - ~/identity/src/Web/bin/Debug/netcoreapp1.1/publish:/app #把编译好的序集添加到数据卷中

        links:

            - 'ucenter:api.ucenter.com' #因为identity项目依赖ucenter项目,identity目内部通过url:api.ucenter.com调用ucenter的webapi,所以这里要给设置一个和ur一样的别名,这样identity项目访问`api.ucenter.com`就会被转发到ucenter容器。

            - redis

        extra_hosts:

            - "dbserver:192.168.199.143" #之前搭建了一个sqlserver容器,那个是单独放在个Linux机器里面,所以这里就直接通过地址调用,注意要开启远程访问。

        container_name: identity

        logging:

            driver: "json-file"

            options:

                max-size: "50k" #因为随着程序的运行,日志会越来越多,导致每次加载时间越越长,所以规定日志文件大小,节省时间

                max-file: "10"

    ucenter:

        build: ~/UCenter/src/WebAPI #ucenter项目的Dockerfile所在的目录

        restart: always

        volumes:

            - ~/UCenter/src/WebAPI/bin/Debug/netcoreapp1.1/publish:/app

        links:

            - redis

        extra_hosts:

            - "dbserver:192.168.199.143"

        container_name: ucenter

    nginx-host:

        build: ./nginx #nginx的Dockerfile所在的目录

        restart: always

        ports:

            - "80:80" #监听主机的80端口,或者其它的端口都可以

        links:

            - identity

            - ucenter

        volumes:

            - ./nginx/sites-enabled:/etc/nginx/sites-enabled #nginx的配置文件放在据卷中,以后需要改动的时候,重启nginx就可以了,不用重新build

            - /WebCommon:/www/data #各个项目共用的静态文件,一般走cdn的,在开发环境里就nginx代理

        container_name: nginx-host

        logging:

            driver: "json-file"

            options:

                max-size: "50k"

                max-file: "10"


上面在集群中配置了4个服务,一个nginx负责监听主机的80端口,并转发到相应的服务中去。
identity是我开发的项目,依赖于ucenter项目
项目中都依赖redis缓存,还有通过host解析的数据库服务dbserver。

2 下面先搭建nginx服务

sites->nginx目录下面,新建sites-enabled目录,再新建一个名为default的配置文件

server {

    listen 80;

    server_name account.xxx.com; #identity项目的域名

    location / {

    proxy_pass          http://identity; #转发到identity服务处理

    proxy_set_header    Host $host;

    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout   150;

    proxy_send_timeout  100;

    proxy_read_timeout  100;

    proxy_buffers       4 32k;

    client_max_body_size    8m;

    client_body_buffer_size 128;

  }

}


server {

  listen 80;

  server_name ucenter.xxx.com; #ucenter项目的域名

  location / {

    proxy_pass          http://ucenter; #转发到ucenter服务处理

    proxy_set_header    Host $host;

    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout   150;

    proxy_send_timeout  100;

    proxy_read_timeout  100;

    proxy_buffers       4 32k;

    client_max_body_size    8m;

    client_body_buffer_size 128;

  }

}


server {

    listen 80;

    server_name cdn.xxx.com; #这里把静态文件打包成一个服务,替代cdn

    root /www/data;

    location / {

    }

}

这个是nginx的配置文件,主要配置Nginx的代理方式。下面编写生成Nginx的Dockerfile,sites->nginx下面新建Dockerfile

FROM tutum/nginx
VOLUME /etc/nginx/sites-enabled

通过这个Dockerfile就可以创建Nginx了,

3 安装redis

  1. 再sites下新建目录:mkdir redis

  2. vim Dockerfile

    FROM redis
    COPY redis.conf /usr/local/etc/redis/redis.conf
    CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
  3. vim redis.conf, 复制粘贴redis的配置,这是redis的官方默认配置。

  4. docker build -t mac-redis .我给它起了个名字叫mac-redis

  5. 镜像创建好之后,先测试一下能不能用,docker run -d --name mac-redis mac-redis。这时候mac-redis的容器已经在后台跑起来了,我们再用redis-cli测试这个redis服务,docker run -it --link mac-redis:redis --rm redis redis-cli -h redis -p 6379使用--rm参数,用完就清除这个容器。测试如下:

    redis:6379> set key1 value1OKredis:6379> get key1"value1"

    看来redis服务没问题,exit退出。再把测试用的redis服务容器也删除掉docker rm -f mac-redis

4 使用docker跑aspnetcore程序

这个是最简单的了,根据微软的镜像来就行了,园子里也有大量的教程。

在这里我把它们放在集群中,只要在docker-compose.yml中配置各个aspnetcore程序的Dockerfile所在的路径即可,在我们的yml文件中有

build: ~/identity/src/Web/  #identity项目的Dockerfile所在的目录

identity的源代码所在的目录为~/identity/,Dockerfile在其中的src/web里面,如下:

FROM microsoft/aspnetcore:1.1.1LABEL Name=identity Version=0.0.1 ENV ASPNETCORE_ENVIRONMENT DevelopmentENTRYPOINT ["dotnet", "Identity.Web.dll"]

如果有多个Dockerfile,可以在yml中指定Dockerfile的名称。

另外一个ucenter的Dockerfile如下:

FROM microsoft/aspnetcore:1.1.1LABEL Name=ucenter Version=0.0.1 ENTRYPOINT ["dotnet", "UCenter.WebAPI.dll"]

代码修改了之后,dotnet publis && docker restart xxx(xxx就是容器的名称)就生效了。

使用chrome浏览器访问

最后进入sites目录,docker-compose up启动集群,由于nginx监听的是主机的80端口,所以需要把绑定的url指向主机的80端口,一种方法是直接在hosts中加解析,但是不推荐这样做,因为如果要访问线上的项目的话,又要改hosts。为了不污染主机环境,推荐使用chrome浏览器,chrome有多用户功能,因此新建一个用户,使用SwitchyOmega插件,将所需要的URl代理到主机的80端口,这样以后开发的时候用这个chrome的这个用户就可以了,完全不影响主机环境。

在开发环节中,debug是必不可少的需求,所以下篇介绍如何用VSCode在Docker中debug。

原文地址:http://www.cnblogs.com/kexxxfeng/p/7125714.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

珍惜、珍爱!

点击上方蓝色关注我们!这是一篇付费文章,其实目的就是不让人看,哈哈哈!不让别人看为什么还要写?因为写了才痛快!

SpringAOP的SchemaBase方式

文章目录1、SpringAOP的专业概念:2、SpringAOP的SchemaBase方式基本流程SchemaBase方式环绕通知方式实现AOPSchemaBase方式的异常通知SpringAOP的SchemaBase方法的参数1、SpringAOP的专业概念: 真实对象: 要进行功能扩展的对象,相当于A对象 代理对象: 完成功能扩展的对象,相当于…

ssl2661-廉价最短路径【SPFA】

前言 这是一篇迟到的博客 题目 找一条最廉价的最短路径 输入输出(建议无视) Input 输入文件第一行有两个整数m和n,用一个空格隔开,其中,m是顶点数,而n是边数。接下来的n行给出所有的边及其价值&#…

自然语言处理的十个发展趋势

转载自 哈工大刘挺教授:自然语言处理的十个发展趋势 近日,由中国人工智能学会、阿里巴巴集团 & 蚂蚁金服主办,CSDN、中国科学院自动化研究所承办的第三届中国人工智能大会(CCAI 2017)在杭州国际会议中心盛大开幕…

SpringAOP的Aspectj方式*

SpringAOP的Aspectj介绍 问题: 目前我们已经能够使用SpringAOP的SchemaBased方式来实现功能扩展。在使用SchemaBased方式实现功能扩展时,发现一个扩展代码就需要声明对应的实现了指定的接口的类,这样造成代码的结构体系过于繁杂。一个通知一个类。 解决…

拥抱.NET Core系列:依赖注入(1)

前言 DIP、IoC、DI 说起DI不得不提IoC这个模式,很多人会把DI和IoC混为一谈,但其实这两者是概念和实现的关系。 依赖倒置原则(DIP):软件设计原则,要依赖于抽象,不要依赖具体实现。 控制反转&…

来自学长同学分享的学习方法

点击上方蓝色关注我们!本文原创:陈浴森同学在科技高度发展的今天,计算机在生活中的作用越来越突出。在学校这一年多的学习当中,我总结了不少的经验,让我在以后的学习当中受益匪浅。一开始没学编程的时候,看…

训练集样本不平衡问题对CNN的影响

转载自 训练集样本不平衡问题对CNN的影响 训练集样本不平衡问题对CNN的影响 本文首发于知乎专栏“ai insight”! 卷积神经网络(CNN)可以说是目前处理图像最有力的工具了。 而在机器学习分类问题中,样本不平衡又是一个经常遇到…

银行转账案例

[1] 案例需求 用户访问登录页面,在页面中输入用户名和密码点击登录,登录成功后 进入到主页中。如果登录败,则在登录页面中提示用户用户名或密码错误。在主页面中,用户在填写银行转账信息,包括:转账账户,转账…

20级、19级 | 一天一瞬间!【日更】

点击上方蓝色关注我们!欢迎来到今天的一天一瞬间专栏今天是2020年09月08日,天气状况:炎热。19级目前还是上午上课下午补课,补课私下里和我说,班内学生表现都不错,听罢,甚是开心,不管…

一张图看懂小程序全生态

6月9日小程序发布整半年,这半年里,小程序接连经历了:受追捧——遇冷——质疑——趋于理性的过程。我们对小程序这半年来的产业发展做了全面的梳理,从中可以发现,小程序已俨然形成了自己的生态体系,这一生态…

自然语言处理中的Attention Model:是什么以及为什么[一]

转载自 自然语言处理中的Attention Model:是什么以及为什么[一] 自然语言处理中的Attention Model:是什么以及为什么[一] 1、前言 要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model(后文有时…

204787 ,194787 |0001 1131 0001 4226 7035 ![2480 ]

点击上方蓝色关注我们!0006 6143 0037 7139 ,2598 4192 0007 7240 0681 1331 0226 ?6849 ?0784 4104 6943 4149 2418 2345 5116 ,7119 0354 0055 3089 1835 ,5261 1783 0250 2601 0110 0171 ,6290 0138 4972 1421 0055 7820 0087 8010 0138 4104 ?1927 1927 ,076…

DDD理论学习系列(9)-- 领域事件

1. 引言 A domain event is a full-fledged part of the domain model, a representation of something that happened in the domain. Ignore irrelevant domain activity while making explicit the events that the domain experts want to track or be notified of, or whi…

ssl1127-方程的解数【HASH,dfs】

前言 我只是凑数的。 正题 输入输出(建议无视) Input 第1行包含一个整数n。第2行包含一个整数M。第3行到第n2行,每行包含两个整数,分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i1,第n2行的数据对应…

自然语言处理中的Attention Model:是什么以及为什么[二]

转载自 自然语言处理中的Attention Model:是什么以及为什么[二] 自然语言处理中的Attention Model:是什么以及为什么[二] 1、Attention Model 图一见下: 图1中展示的Encoder-Decoder模型是没有体现出“注意力模型”的,所以可以…

SpringAOP之代理设计模式

[1]设计模式: 概念: 设计模式其实就是代码的一种结构的设计思路。 好处: 增加代码健壮性 易修改性 可扩展性 设计模式的种类: 三大种类: 建造类设计模式 结构类设计模式 行为类设计模式 参考网址: http://baijiahao.baidu.com/s?id1639156298714178350&wfrspider&forp…

教师节快乐!

点击上方蓝色关注我们!今天是个特殊的节日,教师节,从昨天开始就有学生给我发教师节祝福了……诺,发就发了吧,还害羞!早上一醒来,就看到同学们在群里发祝福,心理美滋滋的。还有直接改…

如何利用.NET Core搭建跨平台的控制台应用程序

尽管传统意义上来说,.NET是只面向Windows的、闭源的专有平台,然而,传统观念即将被颠覆。新的开源跨平台的.NET Core已经开启,意味着你可以在任意平台写C#或.NET,然后在Windows、Linus和macOS运行。 这个新的.NET平台正…

自然语言处理中CNN模型几种常见的Max Pooling操作

转载自 自然语言处理中CNN模型几种常见的Max Pooling操作 自然语言处理中CNN模型几种常见的Max Pooling操作 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型。 图1展示了在NLP任务中使用CNN模型的典型网络结构。 一般而言,输入的字或者词用…