• .NET Core中使用Docker


    一、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        52999;
            server_name   服务器IP;            
          #  access_log    /var/log/nginx/rap_access.log;
          #  charset           utf-8;
          #  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.网络问题

  • 相关阅读:
    MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
    DevExpress v17.2新版亮点—DevExtreme篇(三)
    MyEclipse持续性开发教程:用JPA和Spring管理数据(二)
    DevExpress v17.2新版亮点—DevExtreme篇(二)
    多线程(1)
    什么是SpringCloud?
    WebStrom常用快捷键
    七、CommonJS规范和Note.js模块概念的介绍
    六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用
    JSP标签
  • 原文地址:https://www.cnblogs.com/FireworksEasyCool/p/10218384.html
Copyright © 2020-2023  润新知