VMware Workstation Pro学习探索(Linux,Docker)

qdqht00 2020-06-28

这是我在VMware Workstation Pro安装linux docker的一些操作步骤及一些问题记录。

1.在linux上直接运行.net core项目:

今天安装了nginx
部署.net core有前提条件的

需要ip 通过ip addr查看 如果没有的话需要设置下 设置好了需要重启网络服务 要确定服务是启动的状态

然后还需要安装.net core环境

VMware Workstation Pro学习探索(Linux,Docker)

需要配置防火墙的

最终才能访问

2.在linux中安装docker  容器化部署

VMware Workstation Pro学习探索(Linux,Docker)

解决用dockerfile生成镜像慢的问题
1、修改配置文件
vi /usr/lib/systemd/system/docker.service
2、配置文件添加--registry-mirror=https://navyf335.mirror.aliyuncs.com

VMware Workstation Pro学习探索(Linux,Docker)

简单步骤:
1.构建Dockerfile文件(无后缀):

#基于‘mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim‘ 来构建镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
#拷贝项目文件夹中的所有文件到docker容器中的app文件夹 这里是两个参数
COPY . /app 
#设置工作目录为 ‘/app‘ 文件夹,即容器启动默认的文件夹
WORKDIR /app 
#设置Docker容器对外暴露80端口
EXPOSE 80
#使用‘dotnet Core. Web.dll‘来运行应用程序
CMD ["dotnet", "WebApplication1.dll"]

2.上传项目到linux 可以自己创建文件夹
3.使用命令将项目构建为镜像

docker build -t testcore . //-t 指定镜像名 . 表示Dockerfile所在目录 .标识本文件夹 我用的/data/mywebappFiles

注意 dockerfile中基于microsoft/aspnetcore或microsoft/dotnet来构建镜像(dotnet>aspnetcore)需要以服务器上安装的镜像版本做区分
服务器版本与项目版本一定要一致 否则容器运行会报错,如下:

It was not possible to find any compatible framework version.
The specified framework ‘microsoft.aspnetcore.app‘,version ‘3.1.0‘ was not found.
-Check application dependencies and target a framework version installed at:
/usr/share/dotnet/
-Installing .net core prerequisites might help resolve this problem:
https://gp.microsoft.com/fwlink/?LinkID=798306&lcid=0x409
-The .net core framework and sdk can be installed from:
https://aka.ms/dotnet-download
-The following version are installed:
2.1.17 at [/usr/share/dotnet/shared/Microsoft.aspnetcore.app]

此处我的项目是.net core3.1 与最新的差一点 docker pull microsoft/dotnet 都是最新的 版本有点差异 所以我用如下版本
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim

构建成功之后可以用docker images查看镜像

4.将镜像发布为容器

docker run --name testapp -d -p 8000:80 -v /app testcore 
--name指定容器名称 
-d 指定容器后台运行 
-p 指定外部8000端口映射到容器80端口 
-v 绑定数据卷/app (本地目录:容器内目录)本地目录必须为绝对路径 
testcore镜像名

5.查看容器是否是否处于运行状态,若启动失败显示为exited,可查看日志

docker ps -a //查看所有容器的运行状态 
docker exec -it testapp bash //若容器正在运行,进入容器内部 
docker logs testapp//若容器未运行,查看报错日志

6.请求网站查看网站是否运行成功

curl 0.0.0.0:8000 
curl -s -D - localhost:8000 -o /dev/null //查看请求返回信息

最后查看防火墙端口开放情况,以及阿里云后台安全组端口开放情况(如果你是用的阿里云服务),再通过外网访问瞅瞅

7.更新代码
由于在创建容器的时候映射了数据卷,则当有静态文件更新的时候,会自动更新到容器内。
但是当有dll文件更新时,需要手动重启一下容器

docker restart testapp

以上,实现了将一个Asp.Net Core MVC项目发布到docker中的全过程。目前容器中只有一个dotnet镜像,通过地址访问网站实际上直接访问的Kestrel服务器。


Kestrel服务器只是一个轻量级的web服务器,并且不支持基于主机名的绑定(如果1台服务器部署了多个 ASP.NET Core 站点,每个站点需要使用不同的端口)
出于安全性考虑(包括但不限于适当的超时,大小的限制,以及并发连接限制等问题)需要在Kestrel和Internet之间加入一个反向代理服务器(IIS,Nginx或者Apache)

3.使用Nginx反向代理Docker的Asp.Net Core项目的请求

4.如果你要删除的 container 还是运行状态,那么就要先把容器停止了:

docker container stop <container ID>

找到需要删除的容器对应的  container ID 或者名字,进行删除:

docker container rm  <container ID>
批量停止容器:
docker container stop $(docker container ls -a -q)

批量删除容器:
docker container rm $(docker container ls -a -q)

5.设置防火墙

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp 
sudo firewall-cmd --reload

6.Linux中关闭SELinux的方法

1、临时关闭:输入命令setenforce 0,重启系统后还会开启。
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。

VMware Workstation Pro学习探索(Linux,Docker)

 VMware Workstation Pro学习探索(Linux,Docker)

 7.VMware装centos7开机黑屏死机问题

VMware Workstation Pro学习探索(Linux,Docker)

导致问题:

直接就是黑屏,连杠杠都没有
centos系统关不掉
关闭vmware提示:虚拟机XXX繁忙

解决方式
强制关闭vmware,重启计算机(不重启虚拟机重新开提示占用,网上删.lck方式试过没用)
编辑虚拟机设置

VMware Workstation Pro学习探索(Linux,Docker)

 VMware Workstation Pro学习探索(Linux,Docker)

8.vim是vi的升级版本,如果vim不能使用,安装一下就好了。

命令是:yum -y install vim

9.ctrl+c强制中断

10.错误:net/http: TLS handshake timeout;解决方案

docker pull 错误 net/http: TLS handshake timeout 的解决方案

问题原因 :该命令默认从docker远端镜像仓库中拉取镜像,但由于远端仓库的服务器是在国外,我们国内有的用户很可能都访问不

解决:

使用国内镜像 daocloud镜像加速器

该方法需要配置加速器的镜像地址:register.mirror

Linux中使用命令:curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d1d9aef0.m.daocloud.io  该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同

Windows中:在桌面右下角状态栏中右键 docker 图标,修改在 Docker Daemon 标签页中的 json ,把下面的地址:http://d1d9aef0.m.daocloud.io  加入到"registry-mirrors"的数组里。点击 Apply 。

MacOS中:右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中加入下面的镜像地址:http://d1d9aef0.m.daocloud.io 点击 Apply & Restart 按钮使设置生效。

        更多信息,可查看dacloud官网:https://www.daocloud.io/mirror#accelerator-doc

为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

"https://nupozakm.mirror.aliyuncs.com"

11.docker 阿里云镜像加速器配置好之后会报错

job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" fro details.

没有解决

 
VMware Workstation Pro学习探索(Linux,Docker)
 
 
 
VMware Workstation Pro学习探索(Linux,Docker)
 
 

相关推荐