GVKun编程网logo

ubuntu中使用docker部署.netcore2.1(ubuntu docker安装部署)

15

在本文中,我们将详细介绍ubuntu中使用docker部署.netcore2.1的各个方面,并为您提供关于ubuntudocker安装部署的相关解答,同时,我们也将为您带来关于.NETCore微服务架

在本文中,我们将详细介绍ubuntu中使用docker部署.netcore2.1的各个方面,并为您提供关于ubuntu docker安装部署的相关解答,同时,我们也将为您带来关于.NET Core 微服务架构-Docker部署、.net core+Docker部署、.Net Core3.1 使用Docker 部署在Centos 7、.NET Core中使用Docker的有用知识。

本文目录一览:

ubuntu中使用docker部署.netcore2.1(ubuntu docker安装部署)

ubuntu中使用docker部署.netcore2.1(ubuntu docker安装部署)

 

 概述   

   .netcore发布这么久,到现在才在项目中实际运用,之前算是了解一点,一般找工作都会问是否运用过.netcore,软件研发来说,如果这个技术没用过,觉得挺难,其实不难。.netcore主要是跨平台,可以部署在不同的操作系统上。

本文通过一些实例,将.netcore Api项目部署在linux环境中。

 用到的工具

 Linux : Linux version 4.18.0-17-generic (buildd@lcy01-amd64-022) (gcc version 8.2.0 (Ubuntu 8.2.0-7ubuntu1)) 

 Windows与Linux交互工具:MobaXterm 6.6.exe,支持远程连接和上传附件功能

 搭建步骤

  •  创建.netcore2.1 Api项目

 我的IDE是VS 2017,创建一个.netcore Api项目后,目录结果如图

如开始时未添加Docker支持,选择是linux还是windows,具体操作如下

  • 修改Docker配置文件,

 

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["./ApiNetCore.csproj", "./"]
RUN dotnet restore "ApiNetCore.csproj"
COPY . .
WORKDIR "/src"
RUN dotnet build "ApiNetCore.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "ApiNetCore.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ApiNetCore.dll"]

 

 

 

  • 将本地源代码通过MobaXterm上传到Linux目录,显示目录结构如下:

  •  开始构造镜像image:运行命令【sudo docker build -t apinetcoredocker:1.0.0  . 】

    命令中,【apinetcoredocker】代表镜像名称,可以修改成自己所需要的名称。也可以为镜像添加tag,修改【apinetcoredocker】成【apinetcoredocker:1.0.0】为镜像打上1.0.0的tag标签。命令最后面的【.】号是必要的,是dockerfile在当前目录运行docker的意思。详细命令可查看:http://www.runoob.com/docker/docker-build-command.html。

镜像创建成功如图

  • 创建容器并运行

            在运行应用程序【sudo docker run --name apinetcoredocker1  -p 8009:80  apinetcoredocker:1.0.0】

    -p是8009是容器对外端口,80是容器内机器端口。意思是映射外网8081端口到本地容器80端口。

          

  • 最后在浏览器中输入地址,进行测试

          

参考实例:https://www.cnblogs.com/alunchen/p/10139356.html

感谢原著分享!

 

.NET Core 微服务架构-Docker部署

.NET Core 微服务架构-Docker部署

本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发)、统一认证(IdentityServer4)、应用服务(ASP.NET Core WebAPI)。

本文不针对微服务进行说明,后续会针对我对微服务的理解在做记录。

一、Docker原理¶

对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。

但是这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。

  • Docker 中有三个核心概念:Image、Container、Repository。

  • Image: 大家对 镜像 的概念不会陌生。但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。

  • Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。

Repository: Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。

常用的 Docker hub有:

https://hub.docker.com/(docker官方)

https://cr.console.aliyun.com/

二、Windows系统中Docker的安装¶

1、启用Hyper-V¶

打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

cdoecker

2、下载并安装Docker¶

下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows,需要注册一个Docker账号才能下载

下载完成后直接安装

通过命令查看Docker版本号:

cdoecker

3、修改镜像地址¶

由于Docker官方镜像会非常慢,我是修改的阿里云的镜像

cdoecker

4、测试¶

万能的HelloWorld,通过PowerShell运行 Docker run hello-world

cdoecker

docker ps -a //查看运行的容器

cdoecker

以上就是整个Windows中安装Docker环境的过程

三、ubuntu中安装Docker环境¶

我是在AWS申请了一台免费的服务器,是用的ubuntu系统。如果需要申请AWS的服务器,可以通过AWS官网注册账号进行申请,需要填写信用卡账号,https://portal.aws.amazon.com/billing/signup#/start

本文ubuntu中安装Docker是直接参考官方教程:https://docs.docker.com/install/linux/docker-ce/ubuntu/

安装的时候最好切换到root账号进行安装

ubuntu的远程是通过putty,具体怎么用可以百度

四、发布并部署服务¶

1、创建Dockerfile、发布应用程序¶

cdoecker

这是我的工程目录,构建镜像是通过Dockerfile来构建的。

VS2017 是支持自动构建Dockerfile文件,工程右键-添加-Docker支持

下面是我的Dockerfile的内容:

FROM microsoft/aspnetcore:2.1 //基础镜像,这里是.net core的基础运行环境 WORKDIR /publish //创建工程目录 COPY . /publish //将当前目录拷贝到镜像中,注意 COPY . 后面又空格 EXPOSE 80 //容器对外暴露80端口 ENTRYPOINT ["dotnet", "ZY.Gateway.dll"] //启动容器内的服务 //这里相当于构建镜像的命令,是逐行执行 

需要设置Dockerfile的编译为输出到发布目录 cdoecker

 

以上都设置好以后,通过VS发布程序

cdoecker

发布成功后,在工程目录的bin/release目录下找到我们的发布后的文件

cdoecker

其他服务的发布跟以上发布类似

2、上传到ubuntu中¶

通过WinScp工具进行上传,将三个服务都上传到服务器,WinScp怎么用,可以百度一下

cdoecker

3、构建镜像¶

 

docker build -t apigateway . //构建网关镜像 docker build -t identityserver -f /home/ubuntu/dockerapp/identityserver/publish/Dockerfile . //构建认证服务镜像 docker build -t testserver -f /home/ubuntu/dockerapp/testserver/publish/Dockerfile . //构建测试服务镜像 -t //镜像名称 -f //dockerfile文件路径 

cdoecker

 

docker images //查看镜像

cdoecker

4、运行容器¶

镜像已经在前面构建完成,这一步会根据构建的镜像来运行容器,将我们的服务跑起来

docker run -d -p 5000:80 --name apigateway_container apigateway docker run -d -p 6000:80 --name identityserver_container identityserver docker run -d -p 7000:80 --name testserver_container testserver //分别将网关服务,认证服务,测试服务容器跑起来 //-d 保持后台进程运行 -p 端口映射,{主机端口}:{容器端口} 

通过命令查看容器运行情况 docker ps -a cdoecker

在配置网关服务的时候会涉及到容器与容器之间的网络访问,Docker在安装的时候会创建一个172.17.0.1的IP网关,可以通过172.17.0.1来做端口的转发。

通过命令可以查看docker0的网关

cdoecker

Api网关的路由转发配置

cdoecker

5、调用服务¶

通过Postman来调用通过Docker运行的服务,通过API网关访问认证服务获取Token

cdoecker

总结¶

整个Docker的安装,服务的发布,镜像的打包,容器的运行就全部完成。

整个过程不是一气呵成的,踩了不少坑,在踩坑的过程中也学到和理解了很多东西。

Docekr介绍使用

.net core+Docker部署

.net core+Docker部署

1.安装Docker CE

服务器Ubuntu 16

http://docs.docker-cn.com/engine/installation/linux/docker-ce/ubuntu/#%E5%AE%89%E8%A3%85-docker-ce

$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt
-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ sudo add
-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
$ sudo apt-get update
$ sudo apt
-get install docker-ce

测试docker是否安装成功

$ sudo docker run hello-world

2.新建.Net Core Mvc的项目

  • 使用vs或者命令行创建mvc项目
  • 添加Dockerfile
FROM dukecheng/aspnetcore:aspnetcore-runtime-2.2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "CoreApp.dll"]

如果你使用vs创建的项目那么需要上传到linux,命令行我建议直接在linux上执行

3.build你的项目

新建一个build.sh的文件(路径在CoreApp的目录下../CoreApp/build.sh 注意是有解决方案sln的文件夹)添加以下内容

workspace=`pwd`
docker run --rm -v ~/.cache:/root/.cache -v ~/.config:/root/.config -v ~/.gnupg:/root/.gnupg -v ~/.local:/root/.local -v ~/.npm:/root/.npm -v `pwd`/CoreApp:/data digitallyseamless/nodejs-bower-grunt bash -c "bower install && npm install"
docker run --rm -v ~/.dotnet:/root/.dotnet -v ~/.nuget:/root/.nuget  -v ${workspace}:/src --workdir /src dukecheng/aspnetcore:aspnetcore-sdk-2.2.100 bash -c "dotnet restore ./CoreApp.sln && rm -rf ./CoreApp/CoreApp/obj/Docker/publish && dotnet publish ./CoreApp/CoreApp.csproj -c Release -o ./obj/Docker/publish"

执行build.sh

 

sh build.sh

 

 

4.生成docker镜像

docker build -t aspnetapp .

可以使用docker images 查看本地所有镜像

 

5.运行docker镜像

docker run -d -p 8080:80 --name coreapp aspnetapp

-d 是后台执行的意思  

-p 是端口映射 物理端口:docker容器端口

--name 是容器名字

aspnetapp 是镜像的名字

 

.Net Core3.1 使用Docker 部署在Centos 7

.Net Core3.1 使用Docker 部署在Centos 7

以前一直很好奇docker是个什么玩意,今天终于闲下来去玩一下了,关于docker的介绍以及优点介绍,相信大家都有去看过一点文章,我是通过这篇文章了解到docker,里面的作者也有写一系列的教程,大家可以去看看https://www.cnblogs.com/ityouknow/category/1173004.html

接下来就是实战了:

安装 docker (1.安装docker,2.启动docker服务 3.开机自动启动docker服务) 

1 yum install docker     
2 systemctl start docker.service
3 systemctl enable docker.service

 

    检查是否安装正常,显示出版本就证明可以了:

docker -v

   

 

 

 

 

创建项目

   随意创建一个mvc网站项目

 

 

 

 

本地发布验证程序是否运行正常,并且Dockerfile属性要设置为 始终复制

 

 

 

 

   

 

 

 

 

  

  ps:默认启动端口是5000,可以修改appsetting.json文件,添加urls节点指定启动端口 例如: urls:"http://*8068"   。还有其他指定端口方法和原理,参考:https://www.cnblogs.com/cgyqu/p/12169014.html

 

 这里由于我的服务器5000已经有了,所以改成8068

 

 

 

  运行正常

 

 

 

 

 

 

 

 

   

 

 

修改Dockerfile文件

    由于我们已经自己生成发布了在本地了,而vs帮我们自动生成的文件里面,包含了生成->发布->运行,所以这里,我们只需要运行的命令就行

    修改为:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

 

  

   dockerfile文件指令说明:

  • FROM -指定所创建镜像的基础镜像
  • WORKDIR-配置工作目录
  • EXPOSE-声明镜像内服务监听的端口 (可以不写,因为我们具体映射的端口可以在运行的时候指定)
  • COPY-复制内容到镜像   (. .代表当前目录)
  • ENTRYPOINT-启动镜像的默认人口命令

 

打包到服务器

    这里我们使用MobaXterm或者xftp等工具上传上去:

 

 

 

 

构建镜像

    1.进入程序目录,先验证下程序能否启动和访问 

     

       访问正常,关闭网站,开始构建镜像:

       进入当前程序目录,输入构建命令   

docker build -t mytest-mvc .

                

      参数解释:

  •          -t  --指定镜像名称 (只能小写)
  •          .   --表示build上下文为当前目录,默认情况docker会使用上下文的根目录找到Dockerfile文件

           

 

      查看构建的镜像

 

docker images

 

 

 

 

         

 

 

 

 

 

        

 

创建并启动容器 

docker run --name myfirstWeb  -d -p 8041:8068  mytest-web

docker ps -a

 

    参数解释:

     --name 表示容器名称(区分大小写),也可以不指定,默认会生成

     -d         表示在后台以守护形式运行容器

     -p         表示外部端口与内部容器端口映射。关于-p的还有其他用法(https://www.cnblogs.com/williamjie/p/9915019.html)

    mytest-web 是我们刚才创建的镜像名称

 

 

查看是否启动成功

 

 

 

 最后去我们本地访问

  

 

 

 

 

 

遇到的问题:

     1.dockerfile里面指定了EXPOSE 暴露端口,发现最终容器启动的时候内部还是用的配置文件里面那个ulrs里面的端口,可以使用docker logs 容器名 查看启动日志

     2.如果部署成功但发现访问不了,一般都是防火墙问题

     3.在删除容器后,重新添加发现会ip冲突或者其他错误,直接重启一下docker

其他常用命令:

1 docker logs  容器名称
2 docker attach 容器名称或容器ID
3 docker exec -it 59ec /bin/bash  (如果提示“/bin/bash 未找到”之类的 可以改成:docker exec -it 59ec sh,退出ctrl+d)
4 docker stop 容器ID或容器名
5 docker kill 容器ID或容器名
6 docker rm 容器ID或容器名
7 systemctl restart docker

 

 全部命令: https://www.runoob.com/docker/docker-rmi-command.html

参考文章:https://www.cnblogs.com/ityouknow/category/1173004.html

 

.NET Core中使用Docker

.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.网络问题

我们今天的关于ubuntu中使用docker部署.netcore2.1ubuntu docker安装部署的分享就到这里,谢谢您的阅读,如果想了解更多关于.NET Core 微服务架构-Docker部署、.net core+Docker部署、.Net Core3.1 使用Docker 部署在Centos 7、.NET Core中使用Docker的相关信息,可以在本站进行搜索。

本文标签: