一、Docker简介

Docker是基于Linux容器技术(LXC),使用Go语言实现的开源项目,诞生于2013年,遵循Apache2.0协议。Docker自开源后,受到广泛的关注和讨论。

Docker在开发和运维中的优势:

(1)更快的交付和部署。

使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境,开发完后,测试和运维人员可以直接使用完全相同的环境来部署代码,实现了生产环境的无缝运行。

(2)更高效的资源利用。

Docker容器的运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化 ,可以实现更高的性能,同时对资源的额外需求很低。

(3)更轻松的迁移和扩展。

Docker容器几乎可以在任意的平台上运行,支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。

(4)更简单的更新管理。

使用Dockerfile,只需要修改一点点配置,就可以替代以往大量的更新工作。并且所有的修改都以增量的方式被分布和更新,从而实现自动化且高效的容器管理。

首先需要知道以下几个概念:

(1)Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制和创建和更新现有的镜像,用户可以直接从网上下载一个已经做好的应用镜像,并直接使用。

(2)Docker容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的,互不可见的。

可以把容器看做一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间)以及运行在其中的应用程序打包而成的盒子。

(3)Docker仓库

Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。它的设计理念与Git类似。Docker镜像库分公开仓库和私有仓库。最大的公开仓库是官方提供的Docker Hub。当然,如果不想公开镜像,可以搭建自己的私有仓库。

(4)Dockerfile

一般介绍完以上三个概念就结束了,但我在这里要介绍下Dockerfile,因为镜像的好坏很大程度取决于Dockerfile。Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。


二、介绍Visual Studio Tools for Docker使用

安装Docker for Windows,系统需求:Windows 10 64bit: Pro, Enterprise or Education

Visual Studio2017 v15.6或以上

(1)新建一个Web API程序

(2)添加Docker支持

右键项目->添加->Docker支持

选择Linux目标操作系统(Windows目标平台的镜像只能在Windows平台运行,而Linux目标平台的镜像既能在Linux平台下运行,也能在新版Win10下运行,因为新版Win10带Linux系统)

之后VS会自动生成一个Dockerfile文件,暂先不讨论它的优劣。

(3)添加容器程序支持

右键项目->添加->容器业务流程协调程序支持

Visual Studio Tools for Docker 通过以下文件向解决方案添加 docker-compose 项目:

.dockerignore列出在生成上下文时要排除的文件和目录类型。

docker-compose.yml基本 Docker Compose 文件,用于分别定义通过 docker-compose build 和 docker-compose run 生成和运行的映像集合。

docker compose.override.yml一个可选文件,通过 Docker Compose 读取,包含服务的配置替代。 Visual Studio 执行 docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" 以合并这些文件。

可以看到输出,在Debug模式下,Visual Studio Tools for Docker已经帮我们新建镜像myapi:dev,dev是镜像的标签。而在Release模式下运行,会生成myapi:latest镜像。

在命令行中输入:docker images

可以看大此镜像。TAG是镜像的标签,IMAGE ID是镜像的唯一标识,CREATED是镜像创建时间,SIZE为镜像大小,优秀的镜像往往体积都较小。

(4)在Debug模式下运行程序,成功返回["value1","value2"]

我们来看它的容器,输入指令:docker ps -a

可以看到容器状态STATUS为UP,已经启动了12分钟。状态为Exited为停止状态。

(5)然后换成Release模式,重新生成项目,成功生成myapi:latest镜像。

这步操作可以改成cmd进入Dockerfile所在目录,输入指令:docker-compose build

然后输入指令:docker run -it -p 52333:80 myapi:latest

-i:保持标准输入打开,默认为false

-t:是否分配虚拟终端,默认为false

-p:映射到本地主机的临时端口

成功运行镜像,浏览器打开:http://localhost:52333/api/values

可获得返回值,可以看出,新版Win10是可以运行目标平台为Linux的镜像。


三、把镜像推送到Docker Hub上

首先需要注册Docker Hub账号,我注册时候是有坑的,注册系统需要做人机检测,需要翻墙才能完成。官网地址:https://hub.docker.com/

(1)先把镜像打上标签

输入:docker tag ed159c1011fd zhubingjian/myapi:1.0.0

其中ed159c1011fd为myapi:latest的IMAGE ID。

可以看到,多了一个zhubingjian/myapi:1.0.0镜像,它的IMAGE ID和myapi:latest的相同。

(2)推送镜像到Docker Hub

输入指令:docker login

一般需要输入账号和密码,由于我的Docker是登录状态,所以不用输入

输入指令:docker push zhubingjian/myapi:1.0.0

然后登录自己的Docker Hub,查看网站上的镜像。

(3)打开Ubuntu,获取镜像并运行。

输入指令:docker pull zhubingjian/myapi:1.0.0

这个镜像是公开的,其他人也可按这个方式获取

输入指令,运行镜像:docker run –it –p 52998:80 zhubingjian/myapi:1.0.0

新开一个终端,输入指令,测试获取返回值:curl http://localhost:52998/api/values


四、Nginx配置反向代理

最后在Nginx的配置文件中加一段配置,注意端口52998要对应上一步的

server {
listen ;
server_name 服务器IP;
# access_log /var/log/nginx/rap_access.log;
# charset utf-;
# autoindex off; location /{
proxy_pass http://localhost:52998; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}

在本地的浏览器访问:http://localhost:52999/api/values

就可以获取返回值了。

换成Release 模式后重新生成镜像遇到的问题:

1.重启Docker

2.网络问题

.NET Core中使用Docker的更多相关文章

  1. WSL2+Docker部署RabbitMQ以及在Asp.net core 中使用RabbitMQ示例(1)

    本文主要在于最近因疫情不能外出,在家研究的一些技术积累. 主要用到的技术以及知识点: WSL 2 WSL 2+Docker Docker+RabbitMQ 在ASP.NET Core中使用Rabbit ...

  2. Docker - 在CentOS 7中安装Docker

    1-确认系统信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux CentOS-7 3. ...

  3. NET Core+Code First+Docker

    NET Core+Code First+Docker背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这 ...

  4. 在ASP.NET Core中使用Apworks快速开发数据服务

    不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支 ...

  5. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

  6. 在.NET Core中使用Irony实现自己的查询语言语法解析器

    在之前<在ASP.NET Core中使用Apworks快速开发数据服务>一文的评论部分,.NET大神张善友为我提了个建议,可以使用Compile As a Service的Roslyn为语 ...

  7. 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...

  8. .net core 2.x - docker(for windows)-linux配置及项目+SqlServer发布

    将.net core2.x+sqlserver项目发布到docker.呵呵,操作很自如,如下. 1.罗嗦几句 在跑起来之前浪费了不少时间和精力,起初是将docker for windows的环境转换成 ...

  9. Asp.Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

随机推荐

  1. Android ThreadPool

    在Android开发中,如果我们要执行某个耗时任务,一般都会考虑开启一个线程去处理. 一个线程run方法执行完毕后,才算真正结束:但是,这只是结束,并没有被回收:会一直闲置在那里,等待GC去回收.所以 ...

  2. 2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 接收邮件的方式 (2)例举你知道的后门如何启动起来(win及l ...

  3. 20165227《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 kali下载:镜像文件通过同学获得 kali具体安装步骤: 打开VMware,点击新建虚拟机,进行创建 创建完成 ...

  4. kali linux 破解wpa密码

    apt-get update apt-get install hostapd-wpe ls -l /etc/hostapd-wpe/ nano /etc/hostapd-wpe/hostapd-wpe ...

  5. 【转】Python基础语法

    [转]Python基础语法 学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组 ...

  6. Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】

    转自:http://blog.chinaunix.net/uid-20937170-id-3033633.html 学习了驱动程序的设计,感觉在学习驱动的同时学习linux内核,也是很不错的过程哦,做 ...

  7. gunicorn+flask使用与配置

    gun.conf的内容 import os bind = '10.1.240.222:5000' workers = 4 backlog = 2048 worker_class = "syn ...

  8. mysql主从配置 转自http://www.cnblogs.com/sustudy/p/4174189.html

    1.确保主数据库与从数据库一模一样. 例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表 2.在主数据库上创建同步账号. GRANT REPL ...

  9. 多个SpingBoot项目的搭建与部署

    最近几年SpringBoot大热,很多IT公司都开始采用SpringBoot来替换传统的SpringMVC项目.那么如何搭建一个适合开发的项目架构呢? 这里我主要介绍Java程序员使用最多的两种工具进 ...

  10. 转载:Linux内核参数的优化(1.3.4)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19615.html 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改 ...