asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)

引言

Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络进程到网络互连到进程隔离极大的减少了容器的创建和维护,Docker比虚拟机技术更加便捷.
Docker是个跨时代的开源项目,他释放了虚拟化的威力,降低了云计算的开发成本,可以让线上线下的部署的成本变低,无论是开发人员还是运维等信息人员都有必要去了解和掌握Docker,减少不必要的时间成本,远离它(996),当然Docker在如火如荼的时代也成为了面试的加分项.

Base

仓库

仓库是放镜像的地方,同时我们可以往里推镜像,同一个镜像也可以有多个版本(tag),也就是标签

镜像

镜像其实是将应用打包运行的环境,他是一个轻量级的(实际开发中可以将镜像导出并复制到另一台机器.)

拉镜像

docker pull xxx

搜索镜像

docker search xxx

删除镜像

docker rmi xxid

容器

容器相当于类与实例关系,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

正在运行的命令

docker ps

运行命令

docker run xxx /bin/bash

杀掉运行中的容器

docker kill [CONTAINERID]

Docker Nginx

先拉镜像吧

docker pull nginx

搜索一下本地刚才安装的镜像

镜像资源有了,那么我再启动一个容器实例

  • --name是容器名称
  • -p 是端口进行映射,将本地8010映射到容器内部的80端口
  • -d 设置在后台运行的容器

Run

上面运行没问题了,但是并满足不了日常需求,下面我演示一下如何在docker nginx运行静态页面

创建 conf、 www、logs文件夹

  • www:映射nginx容器配置虚拟目录
  • conf:映射nginx配置文件
  • logs:映射日志文件目录

在www目录下面创建一个index.html

将nginx文件配置拷贝到本地目录中

docker cp 2b3869ba5206:/etc/nginx/nginx.conf /docker/conf

部署

docker run -d -p 8011:80 --name blognginx-test-web -v ~/docker/www:/usr/share/nginx/html -v ~/docker/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/docker/logs:/var/log/nginx nginx

  • -p 8011:80:将容器的80端口映射到主机的8011端口。
  • --name blognginx-test-web:将容器命名为 blognginx-test-web。
  • -v ~/nginx/www:/usr/share/nginx/html:将www挂载到/usr/share/nginx/html
  • -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将nginx.conf挂载到/etc/nginx/nginx.conf
  • -v ~/nginx/logs:/var/log/nginx:logs挂载到/var/log/nginx

Docker DotNetCore

netcore项目发布到docker并且通过nginx进行代理
创建一个项目工程,再创建个文件 Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM base AS final
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "DockerDeployDemo.dll"]

docker build -t dockerwebtest . 构建镜像

docker run --name dockerwebtest -p 8012:80 dockerwebtest//运行镜像

code 200

通过nginx进行代理,附上nginx代码


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;

        server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        #access_log logs/access.log main;
        #error_log logs/error.log;
     location / {

             proxy_pass http://172.17.0.1:8012;

             proxy_http_version 1.1;

             proxy_set_header Upgrade $http_upgrade;

             proxy_set_header Connection keep-alive;

             proxy_set_header Host $http_host;

             proxy_cache_bypass $http_upgrade;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

         }

    }

}

修改完后重新启动8011端口的容器
Run

Demo已发布到github上面有需要的可以进行下载.

概要

Demo:https://github.com/fhcodegit/DotNetAspectCore/tree/master/DockerDeployDemo

原文地址:https://www.cnblogs.com/yyfh/p/11613763.html

时间: 2024-10-28 15:26:40

asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)的相关文章

ASP.NETCore 3.0 Autofac替换及控制器属性注入及全局容器使用

1.Autofac基础使用 参考: https://www.cnblogs.com/li150dan/p/10071079.html 2.ASP.NETCore 3.0 Autofac 容器替换 需要引用:Autofac, Autofac.Extensions.DependencyInjection 在Program.cs 使用AutofacServiceProviderFactory进行容器替换. public static IHostBuilder CreateHostBuilder(str

NetCore 2.0 应用程序在centos 7上通过docker发布

一  安装netcore 2.0 SDK 在centos 上面安装netcore 2.0 与window上面是不太一样的,注意,linux是不支持同时安装两个版本的.netcore SDK的,由于我之前开发过netcore 1.04 的,现在需要升级到2.0的SDK 那如何升级. 1.找到当前的安装路径: 2.安装.netcore 2.0 在这边找到你要安装的对应的包:https://www.microsoft.com/net/download/linux 打开  yum instruction

Asp.NetCore轻松学-使用Docker进行容器化托管

前言 没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬核实战派,这里做的一定是一套打完带走的功法.本文使用的学习机器是由 Azure 倾情提供的 30 天试用版本,大家都可以申请的哈. 1. 为什么要使用 docker 1.1 docker 介绍 docker 带来的好处是显而易见的,使用 docker 可以在同一台服务器上部署多个版本的应用,彼此间不

记录第一次简单部署asp.netcore程序到Docker上

linux版本:centOS7 1.安装docker :yum -y install docker-io 2.安装dontnetcore镜像:docker pull microsoft/dotnet 如果出现 net/http: TLS handshake timeout 安装超时的错误,说明是无法进入docker.hub 解决办法添加国内镜像地址: vim  /etc/sysconfig/docker 打开docker的配置文件, 在OPTIONS上追加 --registry-mirror=h

Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二) Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装Nginx.参考网址 3.1.1:添加Nginx存储库 要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令: sudo yum install epel-release EPEL的全称叫 Ex

ASP.NETCore学习记录(一)

ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure 0. ASP.NETCore 介绍 ASP.NETCore是一个新的开源和跨平台的框架,用于构建如Web应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.ASP.NET Core应用可运行于.NET Core和完整的.NET Framework之上.构建它的目的是为那些部署在云端或者内部运行的应用提 供一个优化的开发框

Asp.NetCore依赖注入和管道方式的异常处理及日志记录

原文:Asp.NetCore依赖注入和管道方式的异常处理及日志记录 前言 ????在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog 组件进行记录:同时,还将介绍两种不同的 异常捕获方式:管道捕获/服务过滤:通过本练习,将学习到如何捕获异常.处理异常跳转.记录异常信息. 1. 搭建框架 ????首先,创建一个 WebApi 项目,选择 Asp.Net Core W

Docker+nginx+tomcat7配置简单的负载均衡

本文介绍在Docker上配置简单的负载均衡,宿主机为Ubuntu 14.04.2 LTS,两个CentOS容器,宿主机安装Nginx,两台容器安装tomcat7.结构如下: 此方案的原理是将宿主机的端口和docker容器的端口做一个映射(即访问宿主机的某端口会映射到docker容器对应的端口),然后在宿主机通过配置Nginx,即可达到访问宿主机的某端口,按规则分配到指定的服务地址,即完成了负载均衡. 配置步骤 1.准备宿主机,宿主机是Ubuntu 14.04.2 LTS,安装在Vmware中,具

一步一步带你做WebApi迁移ASP.NET Core2.0

随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP.NET Core 是新一代的 ASP.NET,第一次出现时的代号为 ASP.NET vNext,后来命名为ASP.NET 5,随着它的完善与成熟,最终命名为 ASP.NET Core,这表明它已不是 ASP.NET 的升级,而是一个重新设计的Web开发框架.而它一个非常重要的变化就是它不再依赖于I