参考文档:

https://docs.docker.com/install/linux/docker-ce/centos/

http://www.dockerinfo.net/document

https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current

https://www.cnblogs.com/JulianHuang/p/10919346.html

https://blog.csdn.net/wulex/article/details/81842258

环境

服务器系统:CentOS Linux release 7.2.1511

相关工具:VS2017  xftp  putty

服务器软件:.net core 2.0,docker 18.09.6,docker-compose 1.23.2

面向对象:NetCore和Docker的初学者

因为前面一篇文章已经写了怎么用docker部署项目,所以本文默认服务器系统已安装好docker环境,

不太了解的同学可以查看这篇文章【DotNet跨平台 - docker部署.net core2.0项目】

1.安装Docker Compose

1.1 什么是Dock Compose?

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。

Compose适用于所有环境:生产,登台,开发,测试以及CI工作流程。您可以在常见用例中了解有关每个案例的更多信息。

使用Compose基本上是一个三步过程:

  1. 定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制。

  2. 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。

  3. Run docker-compose up和Compose启动并运行整个应用程序。

上面是官方文档里的介绍,想具体了解的可以参考官方文档:https://docs.docker.com/compose/

使用Docker容器化部署项目,一个项目中肯定会涉及到多个容器,比如Nginx、MySql、NETCore都是一个独立的容器,我们每次部署都需要执行多次创建镜像与运行容器的命令,Docker Compose的出现就很好的解决了这些问题,有了Docker Compose我们就可以通过一条命令,生成多镜像与运行容器了。

网上各种文章都在说Docker Compose很香,具体有多香,咱们就来试一试。

1.2 Docker Compose的安装
//下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
(上面地址如果速度慢的话可以试试下面这个:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

//设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
//查看是否安装成功
docker-compose --version

官方安装文档:https://docs.docker.com/compose/install/

2.服务器部署NETCore项目

2.1 通过xftp将发布后的项目上传到CentOS服务器

部署项目的路径为:/home/app9001,然后新建文件夹app,将发布后的项目文件上传至app文件夹。

2.2 编辑Dockerfile

Dockerfile存放在站点的根目录也就是app文件夹内,我们设置站点的端口为9001。

# 添加基础镜像:docker会从网络下载这个镜像
FROM microsoft/dotnet:-sdk
#容器中系统的工作空间
WORKDIR /app
#拷贝当前文件夹下的文件到容器中系统的工作空间(注意:“.”后面有空格)
COPY . /app #设置Docker容器对外暴露的端口
EXPOSE
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
#使用ENTRYPOINT ["dotnet","系统启动的dll"]
#或使用 CMD ["dotnet","系统启动的dll"]
ENTRYPOINT ["dotnet", "WebTest.dll"]

3.Nginx的配置

.NET Core中默认的Web Server为Kestrel。

Kestrel可以很好的用来为ASP.NET提供动态内容,然而在Web服务方面没有IIS、Apache、Nginx这些全功能的服务器完善。我们可以借助一个反向代理服务器接收来自互联网的HTTP请求并在经过一些初步处理(比如请求的缓存和压缩、提供静态内容、SSL Termination)后将其转发给Kestrel

在app站点的同级目录,创建nginx文件夹,nginx文件夹内创建nginx.conf和Dockfile两个文件。

$ mkdir nginx
$ cd nignx
$ vi Dockerfile

Dockerfile文件的内容如下:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

按【Esc】键,然后输入:wq保存退出。

nginx.conf文件的内容如下:

worker_processes 4;

events { worker_connections 1024; }
http {
sendfile on; upstream app_servers {
server app:9001;
} server {
listen 9001; location / {
proxy_pass http://app_servers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}

【upstream app_servers】配置为 server  app:9001,其中app是在docker-compose.yml 文件中指定的服务名称。【proxy_pass】配置为:http://app_servers,【app_servers】为第五行upstream的名字。

4. 编辑Docker-compose.yml

这个文件与app文件夹和nginx文件夹在同级目录下,这个配置指定将启动两个容器,一个是站点app,一个是反向代理proxy。

version: '3.7'

services:
app:
build:
context: ./app
dockerfile: Dockerfile
expose:
- "9001"
extra_hosts:
- "dockerhost:172.22.0.2"
environment:
TZ: Asia/Shanghai
proxy:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "9001:9001"
environment:
TZ: Asia/Shanghai
links:
- app
  • 对于每个服务,【build】 告诉Docker Compose怎样为每个服务构建镜像

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

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

version:'3.7',这个是根据docker的版本来确定的:

5.启动docker-compose

路径定位到app9001下,然后使用命令启动docker-compose:$ docker-compose up -d

看到了两个绿色的done,说明我们的配置没有问题,下面访问一下9001端口看一下结果http://172.X.X.X:9001/,可以看到网站可以正常访问了。

6.总结

本文简单实现了通过docker-compose来部署NetCore站点,并使用nginx作为反向代理,希望大家看完本文,可以对容器化部署有一个大概的了解,

如果觉得本文知识点比较多,也有简单的入门级NetCore跨平台文章,可以看下我之前写的:

CentOS直接部署NetCore项目:《DotNet跨平台 - .net core项目部署到centos7》

CentOS通过Docker部署NetCore:《DotNet跨平台 - docker部署.net core2.0项目》

dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目的更多相关文章

  1. linux安装docker,并在docker上运行springboot项目

    docker架构示例图 仓库---> 镜像 --->  容器 一.安装docker 1.通过 uname -r 命令查看你当前的内核版本 uname -r 2使用 root 权限登录 Ce ...

  2. 在CentOS 7 上使用Docker 运行.NetCore项目

    安装Docker CentOS 7 安装 Docker 编写Dockerfile 右键项目->添加->Docker 支持 选择Linux 修改为如下: FROM mcr.microsoft ...

  3. 在docker中运行.netcore程序

    安装docker 获取core镜像 docker pull microsoft/dotnet 首先在https://hub.docker.com查找core官方镜像,相关参数设置https://hub ...

  4. Docker部署运行springboot项目,并使用Dockerfile制作镜像

    前言: 本来是要搭建一个自动化部署分布式项目的服务器平台的,使用jenkins+k8s+ELK+springboot把一个简单的springboot项目给搞起来,由于工程太大,先分开把每个技术组件单独 ...

  5. 从零开始学习docker之在docker中运行springboot项目

    一.docker环境配置 首先需要一个安装了docker的服务器(本地或者云服务器),如果没有请看上文,传送门---https://www.cnblogs.com/wdfordream/p/12737 ...

  6. 使用Docker Compose部署SpringCloud项目docker-compose.yml文件示例

    注意各组件之间的依赖关系 microservice-discovery-eureka: image: reg.itmuch.com/microservice-discovery-eureka port ...

  7. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  8. 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docker运行.netcore项目,那么今天我们 ...

  9. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

随机推荐

  1. APP界面架构设计

    作为PM,信息架构和页面流的设计想必烂熟于心,当确定好产品战略层和范围层即为何种目标用户提供何种服务后,就要着手搭建功能架构,将目标功能通过良好的用户体验传递给用户,目的是高效解决用户痛点,从而实现价 ...

  2. java后台服务器向Nodejs客户端发送压缩包文件

    java代码: Map map=new HashMap(); try { //获取本地文件转换成字符换 File file = new File(apppath);//"D:/upload/ ...

  3. AnimationDrawable

    ①先定义一个AnimationDrawable的xml资源文件: <?xml version="1.0" encoding="utf-8"?> &l ...

  4. 编程语言中的字面量在Objective-C中的举例

    关于计算机编程语言中的字面量的介绍可参考:http://baike.baidu.com/view/1208327.htm?fr=aladdin. 下面就介绍Objective-C中的各种常用字面量: ...

  5. 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  6. [Java]1.两数之和 - LeetCode

    1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...

  7. RegexBuddy 4.7.0 x64 评估试用到期,无限试用的办法

    http://www.cnblogs.com/inrg/p/6491043.html 最后对比发现,在注册表 HKEY_USERS 节点下存在一个用户的项,形如 "S-1-5-21-1609 ...

  8. redis watch 加 事务实现秒杀

    <?php   //redis watch 加 事务实现秒杀  $redis = new redis();  $result = $redis->connect('10.10.10.119 ...

  9. 配置zabbix监控windows,cmd运行报错cannot connect to Service Manager: [0x00000005]

    错误原因: cmd运行没有管理员权限 解决: 找到cmd.exe的位置C:\Windows\System32,选中--右键--使用管理员身份运行 再通过cmd进入到zabbix_agentd文件夹进行 ...

  10. 【FFMPEG】Windows下使用Visual Studio 2010编译ffmpeg全过程

    原文  http://www.cnblogs.com/xylc/p/3683203.html 主题 FFmpegWindowsVisual Studio ffmpeg是一个开源的多媒体库,使用非常广泛 ...