Windows下使用docker部署.Net Core
Posted chenxizhaolu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows下使用docker部署.Net Core相关的知识,希望对你有一定的参考价值。
前言
Docker 是一个开源的应用容器引擎,它十分火热,如今几乎成为了后端开发人员必须掌握的一项技能。即使你在生产环境中可能用不上它,就算把它当作一个辅助开发的工具来使用,也是非常方便的。
安装及配置
下载安装
官网下载:https://www.docker.com/get-started
配置镜像加速
国内网络必须配置镜像加速,不然镜像几乎无法下载。
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
配置镜像存储路径
默认docker的运行文件是在C盘,C盘空间不够的话,可以设置到别的盘。
新版本的windows Docker Desktop默认使用wsl运行,文件位置都只能由WSL管理:
如果是老版本Hyper-V,可以通过界面设置。更多信息可参照:win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录 - xhznl - 博客园 (cnblogs.com)
docker基本概念、基础命令可参照:.Net Core in Docker极简入门(上篇) - xhznl - 博客园 (cnblogs.com)
.net core部署到docker
项目添加docker支持
右键项目-添加-Docker支持,目标OS选择Linux,项目自动创建Dockerfile文件。
文件内容主要是通过.net core cli命令来定义了一系列打包发布运行的过程。
#使用asp.net 6作为基础镜像,起一个别名为base mcr.microsoft.com/dotnet/aspnet:6.0 AS base #设置工作目录为/app /app #暴露80和443端口 80 443 #使用dotnet 6作为基础镜像,起一个别名为build mcr.microsoft.com/dotnet/sdk:6.0 AS build #设置工作目录为/src /src #复制WebApp/WebApp.csproj到/src/WebApp/目录下 ["WebApp/WebApp.csproj", "WebApp/"] #运行dotnet restore命令,还原依赖包 dotnet restore "WebApp/WebApp.csproj" #复制WebApp目录下的所有文件到/src/WebApp/目录下 . . #设置工作目录为/src/WebApp/目录下 "/src/WebApp" #运行dotnet build命令,编译项目 dotnet build "WebApp.csproj" -c Release -o /app/build #使用build作为基础镜像,起一个别名为publish build AS publish #运行dotnet publish命令,发布项目 dotnet publish "WebApp.csproj" -c Release -o /app/publish /p:UseAppHost=false #使用base作为基础镜像,起一个别名为final base AS final #设置工作目录为/app /app #复制publish目录下的所有文件到/app/目录下 --from=publish /app/publish . #设置环境变量ASPNETCORE_URLS为http://+:80 ["dotnet", "WebApp.dll"]
构建镜像
在项目根目录启动powershell或cmd窗口来执行docker命令
执行构建命令: docker build -t testpub -f ./WebApp/Dockerfile .
注意:参数-f是指定Dockerfile所在的目录;注意大小写。
使用docker images可以看到打包成功的镜像
启动容器
执行命令:docker run -d -p 5000:80 --name mytestpub1 testpub
返回容器id说明执行成功
查看运行的容器:docker ps
打开浏览器可以正常访问
至此,一个简单的asp.net core web应用就成功运行于docker之中。
也可以利用vs的功能完成前面所有的步骤:在创建完dockerfile文件之后,选择在vs上选择docker运行,vs会自动创建镜像和容器。
使用Docker部署RabbitMQ集群
使用Docker部署RabbitMQ集群
概述
本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘。
Windows10上Docker的安装
因为本人用的是Windows系统,所有推荐一个不错的安装文章,详见:https://blog.csdn.net/xiaoping0915/article/details/75094857
注意:设置阿里云Docker Hub加速,配置Registry mirrors地址“https://j0andt2p.mirror.aliyuncs.com/”。
阿里云的镜像市场:https://dev.aliyun.com/search.html
下载RabbitMQ镜像
1.镜像地址
RabbitMQ Docker官方认证镜像地址:https://dev.aliyun.com/detail.html?spm=5176.1971733.2.16.6c045aaaDxFoMn&repoId=1256
2.安装命令
安装之前,切记把Docker Hub设置为阿里云的加速,方便安装。
docker pull rabbitmq:3.6.15-management
注意使用后缀为"-management"的镜像版本,是包含网页控制台的。
3.查看安装
使用命令:docker images查看下载的镜像,如下图所示:
Docker常用命令
容器停止:docker stop 容器名称
启动容器:docker start 容器名称
删除容器:docker rm 容器名称
删除镜像:docker rmi 镜像名称
查看运行的所有容器:docker ps
查看所有容器:docker ps -a
容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录
进入Docker目录
简单的进入Docker容器的方法分为3种:
- 使用attach
- 使用SSH
- 使用exec
1.attach
attach有一个缺点,当连接终止的时候,或者使用exit之后,容器就会退出后台运行,所以不适合生产环境使用。既然不好用,我们在这里就不过多的介绍它了。
2.SSH
按照之前我们使用liunx的习惯,使用ssh连接服务器似乎是一个很诱人的答案,但这样做并不优雅,也不是最佳的实践方式,详情点击查看:https://blog.csdn.net/bolg_hero/article/details/50267103
3.exec
exec无疑是我们现阶段最好的实践方案,一起来看它是怎么使用的。
进入docker命令:
docker exec -it
/bin/bash
其中/bin/bash 也可能是/bin/sh.
使用docker exec --help查看更多命令,和命令说明。
退出docker:
exit
启动RabbitMQ
docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management
参数说明:
- -d 后台进程运行
- hostname RabbitMQ主机名称
- name 容器名称
- -p port:port 本地端口:容器端口
- -p 15672:15672 http访问端口
- -p 5672:5672 amqp访问端口
启动完成之后,使用:docker ps 查看程序运行情况。
使用:http://宿主ip:15672 访问,用户名密码使用默认:guest/guest.
启动多个RabbitMQ
- docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management
- docker run -d --hostname localhost2 --name myrabbit2 -p 15673:15672 -p 5673:5672 rabbitmq:3.6.15-management
这样我们就可以使用,http://宿主ip:15672 和 http://宿主ip:15673 进行访问了,默认账号密码依旧是guest/guest.
搭建RabbitMQ集群
步骤一:安装RabbitMQ;
步骤二:加入RabbitMQ节点到集群;
步骤一:安装RabbitMQ
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:3.6.15-management
docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:3.6.15-management
docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:3.6.15-management
具体的参数含义,参见上文“启动RabbitMQ”部分。
注意点:
- 多个容器之间使用“--link”连接,此属性不能少;
- Erlang Cookie值必须相同,也就是RABBITMQ_ERLANG_COOKIE参数的值必须相同,原因见下文“配置相同Erlang Cookie”部分;
步骤二:加入RabbitMQ节点到集群
设置节点1:
docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
设置节点2,加入到集群:
docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram [email protected]
rabbitmqctl start_app
exit
参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。
设置节点3,加入到集群:
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram [email protected]
rabbitmqctl start_app
exit
设置好之后,使用http://物理机ip:15672 进行访问了,默认账号密码是guest/guest,效果如下图:
启动了3个节点,1个磁盘节点和2个内存节点。
配置相同Erlang Cookie
有些特殊的情况,比如已经运行了一段时间的几个单个物理机,我们在之前没有设置过相同的Erlang Cookie值,现在我们要把单个的物理机部署成集群,实现我们需要同步Erlang的Cookie值。
1.为什么要配置相同的erlang cookie?
因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。
2.Erlang Cookie的位置
要想知道Erlang Cookie位置,首先要取得RabbitMQ启动日志里面的home dir路径,作为根路径。使用:“docker logs 容器名称”查看,如下图:
所以Erlang Cookie的全部路径就是“/var/lib/rabbitmq/.erlang.cookie”。
注意:每个人的erlang cookie位置可能不同,一定要查看自己的home dir路径。
3.复制Erlang Cookie到其他RabbitMQ节点
获取到第一个RabbitMQ的Erlang Cookie之后,只需要把这个文件复制到其他RabbitMQ节点即可。
物理机和容器之间复制命令如下:
- 容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
- 物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录
设置Erlang Cookie文件权限:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。
参考资料
https://blog.csdn.net/xiaoping0915/article/details/75094857
https://blog.csdn.net/luosai19910103/article/details/78604692
https://blog.csdn.net/bolg_hero/article/details/50267103
http://ivivisoft.com/2017/03/06/rabbitmq-cluster/
长按二维码,关注作者更多动态
以上是关于Windows下使用docker部署.Net Core的主要内容,如果未能解决你的问题,请参考以下文章