在本文中,我们将详细介绍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安装部署)
- .NET Core 微服务架构-Docker部署
- .net core+Docker部署
- .Net Core3.1 使用Docker 部署在Centos 7
- .NET Core中使用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部署
本文主要介绍通过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,然后点击确定即可,如图:
2、下载并安装Docker¶
下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows,需要注册一个Docker账号才能下载
下载完成后直接安装
通过命令查看Docker版本号:
3、修改镜像地址¶
由于Docker官方镜像会非常慢,我是修改的阿里云的镜像
4、测试¶
万能的HelloWorld,通过PowerShell运行 Docker run hello-world
docker ps -a //查看运行的容器
以上就是整个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、发布应用程序¶
这是我的工程目录,构建镜像是通过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的编译为输出到发布目录
以上都设置好以后,通过VS发布程序
发布成功后,在工程目录的bin/release目录下找到我们的发布后的文件
其他服务的发布跟以上发布类似
2、上传到ubuntu中¶
通过WinScp工具进行上传,将三个服务都上传到服务器,WinScp怎么用,可以百度一下
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文件路径
docker images //查看镜像
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
在配置网关服务的时候会涉及到容器与容器之间的网络访问,Docker在安装的时候会创建一个172.17.0.1的IP网关,可以通过172.17.0.1来做端口的转发。
通过命令可以查看docker0的网关
Api网关的路由转发配置
5、调用服务¶
通过Postman来调用通过Docker运行的服务,通过API网关访问认证服务获取Token
总结¶
整个Docker的安装,服务的发布,镜像的打包,容器的运行就全部完成。
整个过程不是一气呵成的,踩了不少坑,在踩坑的过程中也学到和理解了很多东西。
Docekr介绍使用
.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
以前一直很好奇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
一、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.1和ubuntu docker安装部署的分享就到这里,谢谢您的阅读,如果想了解更多关于.NET Core 微服务架构-Docker部署、.net core+Docker部署、.Net Core3.1 使用Docker 部署在Centos 7、.NET Core中使用Docker的相关信息,可以在本站进行搜索。
本文标签: