将.netcore5.0(.net5)部署在Ubuntu的docker容器中
环境:
宿主机:winows 10 家庭版
虚拟机管理软件:Hyper-V
虚拟机系统:Ubuntu 20.10
Docker版本:Docker CE 20.10.2
Core版本:5.0
本文不讲docker的基础知识,关于虚拟机配置和网络共享看这里
571115139
一、配置Ubuntu固定网络,和DNS。方便后面ssh连接, 配置完记得ping一ping
不想后面各种网络问题就先配置好这个!
- 使用ifconfig命令查看网卡
- 更改配置信息(注意这里DNS设置和网关设置)
sudo vi /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens33: #配置的网卡的名称
addresses: [192.168.137.35/24] #之前分配的地址是137网段的,配置的静态ip地址和掩码
dhcp4: no #关闭DHCP,一般自动获取才yes
optional: true
gateway4: 192.168.137.1 #网关地址
nameservers:
addresses: [192.168.137.1,8.8.8.8] #DNS服务器地址,多个DNS服务器地址需要用英文逗号分隔开,共享内网 192.168.137.1 就行了
version: 2
renderer: networkd #指定后端采用systemd-networkd或者Network Manager,可不填写则默认使用systemd-workd
- 使配置的ip地址生效
sudo netplan apply
二、Ubuntu 安装Docker 一把梭,反正我是成功了。
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
#最后测试是否安装成功
docker version
三、.net core 添加Docker支持
直接在项目目录下添加Dokerfile,这里没有用自带的doker支持

文件内容
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base #.net 5基础镜像,很明显没有了那个core
WORKDIR /app #设置工作目录
COPY . /app #这里是将当前目录下的文件拷贝到 镜像 /app 目录下面
##EXPOSE 8586 #暴露出去的端口,这里我们通过程序里面监听不使用这个配置
##使用国内镜像源
RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib\n\
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" > /etc/apt/sources.list
# 用gdi+绘制的功能就需要安装这个包支持
RUN apt-get update && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
# 运行 CMD命令
ENTRYPOINT ["dotnet", "FtCap.Mvc.Web.dll"]
这里注意的三点:
- FROM 基础镜像在5.0后就去除了core 官方也有说明,对于开发这是3.1到5.0最大的改动,关于.net5 镜像源其他说明可以到 这里 去查看
- 不同系统的国内镜像源版本代号不同,这里使用的是阿里云的地址,更多 查看阿里云OPSX镜像站,而我这里是找的最新的debian源,因为系统比较新..安装其他的需要添加密钥的认证,没有镜像的情况下 就很慢了
- apt-get install -y libgdiplus 目的是安装gdi+的支持,windows系统自带,但是到linux下面需要手动安装,不然无法使用图形绘制等功能,比如图形验证码
四、发布并部署.net5
OK,文件创建好了,直接发布项目到文件夹.注意看dockerfile 一定要发布出来

然后通过 scp或其他软件上传到Ubuntu虚拟机。我这里仅仅只用了scp来上传,cd到publish上级目录运行以下命令
scp -r publish Ubuntu用户名@UbuntuIP:/home #我这里连文件夹一起拷贝到了home下面,注意设置publish的读写权限 由于是本地我直接 chmod 777.
- 到这里文件已经拷贝到ubuntu上了,然后 制作镜像->启动容器一把梭,反正我是成功了....
cd /home/publish #进入刚才发布的目录里面
创建镜像
docker build -t dockerdemo001 . #(注意最为英文句号,表示在当前目录下搜索Dockerfile文件),如果没有报错基本就创建成功了
docker images #检查一下看看名称是否对如果是 none就解决问题删了重来 ,删除 docker rmi <ID>
参数分解:
- -t ---指定镜像名称 小写
- 命令结尾处 . ---表示build上下文为当前目录,默认情况下docker会使用在上下文的根目录下找到Dockerfile文件
启动容器
docker run --name dockerdemowww -p 8586:8585 -d dockerdemo001 #如果没有报错基本上没啥问题
参数分解:
-d ,表示在后台以守护态(daemonized)形式运行容器
-p 外部端口与内部容器端口映射。外部端口:内部端口
--name 指定容器的名称。当然可以不指定,默认会为我们创建
最后一个参数 dockerdemo001 就是我们刚创建的镜像名称
查看并运行发布的程序
docker ps #查看正在运行的docker容器,如果有说明已经启动成功,没有看看 docker ps -a ,是否存在,存在尝试 docker start <容器名称> 启动
#测试请求网站,如果成功就完成了docker上的部署
curl -i "http://127.0.0.1:8586"
#外网访问开放防火墙端口
ufw allow 8586
局域网访问,成功!

到这里就完成了.net5 在docker上部署了
五、其他注意事项
- 我这里每次重启电脑,都需要重新在 网络连接 进行 上文中共享网络的操作。也就是先关闭共享再重新共享,不然ubuntu无法正常联网。如果在已经启动的ubuntu下,还需要重启docker0网桥,不然容器内部无法联网
- 关于容器内部的持久化和维护可以使用 docker 中的 Volume来实现。这样就不用每次进入容器去查看或修改一些操作了
- 使用 文件挂载的方式解决docker中时区问题,主要是
-v /etc/localtime:/etc/localtime:ro这句命令
docker run -d --name xxx容器名 -p 8586:8585 -v ftLogs:/app/Logs -v /etc/localtime:/etc/localtime:ro xxximage
额外赠送docker基础命令一打,注意大多数linux命令都能通过 docker xx 来用。比如 docker top
docker --help
docker run --help #使用类似的写法查看子命令的帮助
exit #退出容器
docker run -it busybox #启动busybox镜像的新容器实例
docker run -it --name <name> busybox #--name为容器指定名称,在我们使用docker run启动容器的时候,有以下选项来选择网卡的工作模式:-net=
–net=bridge— #默认选项,用网桥的方式来连接docker容器。
–net=host— docker #跳过配置容器的独立网络栈。
–net=container:NAME_or_ID— #新建的容器使用已有容器的网络配置。
–net=none— #新建的容器建立一个网络栈,但不对这个网络栈进行任何配置,所以只能访问本地网络,没有外网。
docker ps #查看正在运行的容器,加-a显示全部,-q只显示容器ID,-f筛选,docker ps -a -f=ancestor=busybox 按照名称筛选
docker rm <容器ID> #删除容器,使用docker rm $(docker ps -q -a) 这样的写法可以删除全部
docker start <容器ID> #启动一个容器实例,后台运行
docker stop <容器ID> #停止
docker run -d busybox #创建实例并后台运行,但如果容器没什么操作,会自动停止,start不会停止
docker attach <容器ID> #start 容器后默认后台运行,attach可以进入容器
docker images #列出所有镜像
sudo docker rmi <镜像ID> #删除镜像,删除前需要先删除该镜像的容器
docker exec -it mynginx /bin/bash #进入 mynginx 容器中以交互模式
#查看端口映射信息:
docker port <id> #3306/tcp -> 0.0.0.0:330
#查看logs:
docker logs <id>
docker network inspect bridge #查看网络桥接
docker network ls #列出网络信息
docker network inspect <容器ID> #网络检测
docker inspect <容器ID> #查看容器元数据,信息比较完整
将.netcore5.0(.net5)部署在Ubuntu的docker容器中的更多相关文章
- 在docker容器中编译hadoop 3.1.0
在docker容器中编译hadoop 3.1.0 优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低. Hadoop 3.1.0 的源代码目录下有一个 `sta ...
- .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
目 录 1. 概述... 2 2. 演示信息... 2 3. 安装Docker容器... 2 4. 安装dotnet镜像... 3 5. ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- Linux下将.Asp Core 部署到 Docker容器中
我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...
- docker多个容器连接 将 Rails 程序部署到 Docker 容器中
在docker中使用MySQL数据库 https://yq.aliyun.com/articles/583765 将 Rails 程序部署到 Docker 容器中
随机推荐
- (九)Struts2模型驱动和属性驱动
出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯 ...
- 一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?
#(1)redis分布式锁 官方叫做RedLock算法,是redis官方支持的分布式锁算法. 这个分布式锁有3个重要的考量点,互斥(只能有一个客户端获取锁),不能死锁,容错(大部分redis节点创建了 ...
- 【笔记】《Redis设计与实现》chapter22 二进制位数组 chapter23 慢查询日志 chapter24 监视器
chapter22 二进制位数组 22.4 BITCOUNT命令的实现 遍历算法 查表算法 variable-precision SWAP算法 chapter23 慢查询日志 Redis的慢查询日志功 ...
- java反射Array的使用
1.什么是Array Array是一个类的简写,全限定类名是java.lang.reflect.Array. 2.Array有什么用 Array可以代表所有的数组,可以通过Array动态创建与修改里面 ...
- 死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- 【Java】说说你对ThreadLocal的理解
思路: 0.ThreadLocal是什么?有什么用? 1.ThreadLocal用在什么地方? 2.ThreadLocal的一些细节 3.ThreadLocal的最佳实践 一.ThreadLocal用 ...
- Typora+PicGo+cos图床打造开发者文档神器
一.Typora简介 markdown简单.高效的语法,被每一个开发者所喜爱.Typora又是一款简约.强悍的实时渲染markdown编辑器.本文将介绍Typora搭配PicGo与腾讯cos对象存储( ...
- hdu4846 最大子正方形(dp)
题意: 给你一个图,让你找到最大的子矩形. 思路: 之前做过一个最大子矩阵,记得当时是用三种方法做的,两种都是瓶颈法,第三种是dp,结果今天的用瓶颈吧怎么都过不去,哎!不知道为 ...
- LA3971组装电脑
题意: 你有b块钱,想要组装一台电脑,给你提供一些零件,每种零件提供一个或几个,组装电脑的前提是每种零件只能也必须选择一个,每种零件都有自己的种类,名字,价格,还有品质,要求是在能配成电脑 ...
- Android Hook框架adbi的分析(3)---编译和inline Hook实践
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75200800 一.序言 在前面的博客中,已经分析过了Android Hook框架a ...