• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 利用docker-compose搭建AspNetCore开发环境

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

作者:蝌蝌 字体:[增加 减小] 来源:互联网 时间:2018-08-20

蝌蝌 通过本文主要向大家介绍了docker,compose,AspNetCore等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

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

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

sites
    nginx
        sites-enabled
            default
        Dockerfile
    redis
        Dockerfile
        redis.conf
    docker-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 value1
OK
redis: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.1
LABEL Name=identity Version=0.0.1
ENV ASPNETCORE_ENVIRONMENT Development
ENTRYPOINT ["dotnet", "Identity.Web.dll"]

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

另外一个ucenter的Dockerfile如下:

FROM microsoft/aspnetcore:1.1.1
LABEL 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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET Core 2.1 使用Docker运行的方法步骤
  • .Net Core自动化部署之利用docker版jenkins部署dotnetcore应用的方法
  • Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现
  • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例
  • .NET Core利用skiasharp文字头像生成方法教程(基于docker发布)
  • 利用docker-compose搭建AspNetCore开发环境

相关文章

  • 2017-05-11Asp.net中阻止页面按钮多次提交的解决办法
  • 2017-05-11Asp.net mvc 权限过滤和单点登录(禁止重复登录)
  • 2017-05-11asp.net简单实现页面换肤的方法
  • 2017-05-11浅谈ASP.NET中MVC 4 的JS/CSS打包压缩功能
  • 2017-05-11ASP.NET Core MVC压缩样式、脚本详解
  • 2017-05-11ASP.Net中数据展示控件的嵌套使用示例
  • 2017-05-11asp.net 分页链接方法
  • 2017-05-11Asp.net Core 初探(发布和部署Linux)
  • 2017-05-11用WebClient.UploadData方法上载文件数据的方法
  • 2017-05-11SQL为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net repeater实现批量删除第1/2页
    • ASP.NET设计网络硬盘之两重要类代码
    • 在ASP.NET中用存储过程执行SQL语句
    • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍
    • asp.net下利用JS实现对后台CS代码的调用方法
    • asp.net程序编译调试时偶尔出现访问被拒绝的错误的解决方法
    • 微信服务器中下载文件到本地的实例代码
    • Razor模板引擎简单介绍
    • 使用Lucene.NET实现站内搜索
    • asp.net字符串分割函数使用方法分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有