您的位置:首页 > 运维架构 > Docker

.NET Core 在 Docker 环境下的坑有点深

2019-08-26 14:50 1831 查看

一,Docker 的安装

Windows 安装  Docker 官方文档: https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/quick-start/quick-start-windows-server

Docker 在不同Windows版本的系统上安装,安装方法是有差异的。

1,在Win10 的安装

在 官方网站 上注册一个账号,下载程序进行安装就可以了,整个安装过程绝比安装一个QQ要简单很多。

2,在Windows Server 2016操作系统上

Windows Server 版本,只能安装Docker EE版本。

a,在安装Docker之前,更新操作系统的所有补丁,具体操作方法如下:

在CMD窗口,或者Powershell窗口输入  sconfig 命令,弹出如下窗口:

选择 【6】,再选择【A】,对操作系统的所有补丁进行更新

 

b,进入PowerShell窗口,安装  Nuget

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force #指定Nuget安装包最小版本

c, 进入PowerShell窗口,用命令行安装 Docker  (摘自:https://q.cnblogs.com/q/104529/

Install-Module DockerProvider -Force

Install-Package Docker -ProviderName DockerProvider -Force

或者

Install-Module -Name DockerMsftProvider -Force #安装docker模块

Install-Package -Name docker -ProviderName DockerMsftProvider -Force #安装docker包

 

d,重新启动电脑

Restart-Computer -Force #重新启动

备注:在安装的过程,很有可能会出现一个坑,找不到 “ C:\Users\ADMINI~1\AppData\Local\Temp\2\DockerMsftProvider\docker-19-03-1.zip ” 文件,如下图所示:

解决方法:

a, 找到配置文件   “C:\Users\ADMINI~1\AppData\Local\Temp\2\DockerMsftProvider\DockerDefault_DockerSearchIndex.json”  ,查找缺失文件对应的网络路径,把此文件下载到本地。

c, 执行更新命令     

Find-Package – ProviderName DockerMsftProvider | Install-Package -Verbose

安装完成后,执行如下命令,能够看到 Docker 版本相关信息。

二,Docker 制作镜像文件

1,制作一个镜像文件:

docker build -t dockerdemo03 .         # 这个命令的后边,一定要有一个圆点

  b,根据一个镜像文件,运行一个容器  

docker run -d -p 9990:80 dockerdemo03

容器运行成功后,可以通过如下IP进行访问:

http://10.0.75.1:9990/api/values   c,也可以通过配置路由规则的方式,用本机IP访问:
#route print 192.168.11.89
route -p add 192.168.11.89 MASK 255.255.255.240 10.0.75.1
#route delete 192.168.11.89

http://192.168.11.89:9990/api/values

不小心,删除了默认的路由规则,可以用如下命令恢复本机电脑的默认路由: 方式一:
netsh int ipv4 reset

方法二(摘自:https://www.cnblogs.com/KeenLeung/p/3511233.html):

netsh winsock reset catalog
netsh int ip reset reset.log hit

重启电脑后,即可。

备注:

一些基本Docker操作命令

docker images                      查看镜像文件
docker ps  -a                        查看所有容器的运行记录,以异常方式退出的容器将具有非零状态代码
docker ps                             查看正在运行的容器
docker stop <container-id>  停止某个容器
docker kill  <container-id>  杀掉某个容器
docker rm <container-id>    删除某个容器
docker rmi <image-id>        删除某个镜像

三,docker 镜像的 PUSH,PULL(深坑)

 

现在,现在我要把这个镜像文件发布到服务,我的思路是:先把镜像文件 PUSH 到Docker的仓库,再到服务器上把这个镜像文件拉取下来。

1,把镜像文件PUSH到仓库:

用自己注册的账号登录到Docker 

把镜像文件推送到仓库

#给镜像文件取一个别名
docker tag bbbf62ce2eaf xcj26/webapp22
#把镜像文件推送到仓库
docker push xcj26/webapp22 

 推送成功。

2,服务器PULL 镜像文件:

进入到服务器(Window Server 2016)的Docker ,登录并拉取刚才PUSH的镜像文件:

docker pull xcj26/webapp22  #拉取镜像文件

错误信息提示为:

a Windows version 10.0.17134-based image is incompatible with a 10.0.14393 host

显示操作系统的版本不兼容

=====换个思路=====

我把本地的程序发布成本地文件,然后拷贝到服务器,再创建 Dockerfile 生成镜像文件。

 

 也是同样的问题

a Windows version 10.0.17134-based image is incompatible with a 10.0.14393 host

查阅了很多资料,最有用的就是如下这两个信息:

stackoverflow:https://stackoverflow.com/questions/54229367/dockers-image-and-host-are-incompatible

windows 容器的兼容性:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility

大致意思就是 基础镜像库(FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1803 AS base)不支持在Windows Server 2016(10.0.14393) 服务器上运行。 但是支持在Win 10(10.为。17134)电脑上运行。

在Win 10电脑上用Docker环境上开发一个程序,而不能在自家的服务器Window Server 2016上运行,这坑有点深。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: