环境:

    宿主机:winows 10 家庭版

    虚拟机管理软件:Hyper-V

    虚拟机系统:Ubuntu 20.10

    Docker版本:Docker CE 20.10.2

    Core版本:5.0

本文不讲docker的基础知识,关于虚拟机配置和网络共享看这里

571115139

一、配置Ubuntu固定网络,和DNS。方便后面ssh连接, 配置完记得ping一ping

不想后面各种网络问题就先配置好这个!

  1. 使用ifconfig命令查看网卡
  2. 更改配置信息(注意这里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
  1. 使配置的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"]

这里注意的三点:

  1. FROM 基础镜像在5.0后就去除了core 官方也有说明,对于开发这是3.1到5.0最大的改动,关于.net5 镜像源其他说明可以到 这里 去查看
  2. 不同系统的国内镜像源版本代号不同,这里使用的是阿里云的地址,更多 查看阿里云OPSX镜像站,而我这里是找的最新的debian源,因为系统比较新..安装其他的需要添加密钥的认证,没有镜像的情况下 就很慢了
  3. apt-get install -y libgdiplus 目的是安装gdi+的支持,windows系统自带,但是到linux下面需要手动安装,不然无法使用图形绘制等功能,比如图形验证码

四、发布并部署.net5

  1. OK,文件创建好了,直接发布项目到文件夹.注意看dockerfile 一定要发布出来

  2. 然后通过 scp或其他软件上传到Ubuntu虚拟机。我这里仅仅只用了scp来上传,cd到publish上级目录运行以下命令

scp -r publish Ubuntu用户名@UbuntuIP:/home #我这里连文件夹一起拷贝到了home下面,注意设置publish的读写权限 由于是本地我直接 chmod 777.
  1. 到这里文件已经拷贝到ubuntu上了,然后 制作镜像->启动容器一把梭,反正我是成功了....
cd /home/publish #进入刚才发布的目录里面

创建镜像

docker build -t dockerdemo001 . #(注意最为英文句号,表示在当前目录下搜索Dockerfile文件),如果没有报错基本就创建成功了
docker images #检查一下看看名称是否对如果是 none就解决问题删了重来 ,删除 docker rmi <ID>

参数分解:

  1. -t ---指定镜像名称 小写
  2. 命令结尾处 . ---表示build上下文为当前目录,默认情况下docker会使用在上下文的根目录下找到Dockerfile文件

启动容器

docker run --name dockerdemowww -p 8586:8585 -d dockerdemo001 #如果没有报错基本上没啥问题

参数分解:

  1. -d ,表示在后台以守护态(daemonized)形式运行容器

  2. -p 外部端口与内部容器端口映射。外部端口:内部端口

  3. --name 指定容器的名称。当然可以不指定,默认会为我们创建

  4. 最后一个参数 dockerdemo001 就是我们刚创建的镜像名称

  5. 查看并运行发布的程序

docker ps #查看正在运行的docker容器,如果有说明已经启动成功,没有看看 docker ps -a ,是否存在,存在尝试 docker start <容器名称> 启动
#测试请求网站,如果成功就完成了docker上的部署
curl -i "http://127.0.0.1:8586"
#外网访问开放防火墙端口
ufw allow 8586

局域网访问,成功!

到这里就完成了.net5 在docker上部署了

五、其他注意事项

  1. 我这里每次重启电脑,都需要重新在 网络连接 进行 上文中共享网络的操作。也就是先关闭共享再重新共享,不然ubuntu无法正常联网。如果在已经启动的ubuntu下,还需要重启docker0网桥,不然容器内部无法联网
  2. 关于容器内部的持久化和维护可以使用 docker 中的 Volume来实现。这样就不用每次进入容器去查看或修改一些操作了
  3. 使用 文件挂载的方式解决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容器中的更多相关文章

  1. 在docker容器中编译hadoop 3.1.0

    在docker容器中编译hadoop 3.1.0 优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低. Hadoop 3.1.0 的源代码目录下有一个 `sta ...

  2. .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。

    目       录 1.      概述... 2 2.      演示信息... 2 3.      安装Docker容器... 2 4.      安装dotnet镜像... 3 5.      ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  8. Linux下将.Asp Core 部署到 Docker容器中

    我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...

  9. docker多个容器连接 将 Rails 程序部署到 Docker 容器中

    在docker中使用MySQL数据库 https://yq.aliyun.com/articles/583765 将 Rails 程序部署到 Docker 容器中

随机推荐

  1. Toolkit 大更新:UI 更美观,用起来更方便!

    前言 前段时间有小伙伴在群里聊天,说到 Toolkit 下载量到 4.9k 了.就突然想起来,很久没有更新这个插件. PS:我是用它申请了 License,一般时候使用 Json 格式化功能. 趁着周 ...

  2. 《青橙商城》day01避坑指南

    1.persistence-api报红 问题: 在模块qingcheng_pojo下的pom.xml中,报红 <dependencies> <dependency> <g ...

  3. 我与Git的那些破事(下)--分支模型

    在上篇文章中,我提到了Git的基本概念和一些本人实际项目中的总结.然而,最近读了Vincent Driessen写的一篇文章,觉得他总结的太好了,站在他肩膀上忍不住将自己的理解分享出来.Vincent ...

  4. 【Java】String、StringBuilder和StringBuffer

    [String] 首先,从String类的定义入手,可以看到String类是由final修饰,即不可变的,一旦创建出来就不可修改,因此首先明确,字符串的拼接.截取等操作都会产生新的字符串对象. 观察以 ...

  5. 1036 Boys vs Girls

    This time you are asked to tell the difference between the lowest grade of all the male students and ...

  6. 8.switch语句

    switch语句语法 switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数 ...

  7. .NET 中的 Worker Service 入门介绍

    翻译自 Steve Gordon 2020年3月30日的文章 <WHAT ARE .NET WORKER SERVICES?> [1] 随着 .NET Core 3.0 的发布,ASP.N ...

  8. JavaScript数组详解-全网最全

    定义数组的方式 定义数组的方式有多种,分别如下 let array=[] (字面量) let array=new Array() let array=new Array([length]) lengt ...

  9. 04- HTML常用标签

    HTML标签分类 通过上节博客我们知道了网页的组成:文字 图片 连接 视频 音频.在HTML页面中,带有"< >"符号的元素被称为HTML标签,如上面提到的 <H ...

  10. 【ElasticSearch】shards,replica,index之间的关系

    1.index 包含多个shard ,在创建index的时候可以自定义shards和replica的数量 例如: 新增一个index,手动指定shard和replica的数量 PUT demo_ind ...