Linux及Docker学习记录
以下是我理由虚拟机操作linux及docker的一些问题记录
一.linux部署.net core
1.IP问题,linux下通过ip addr 查看,如果没有的话需要设置,具体步骤 见之前的博客《VMware Workstation CentOS7 Linux 学习之路(1)--系统安装》 设置好了需要重启网络服务 要确保服务的启动状态
2.需要安装.net core环境
3.需要配置防火墙

二.在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.查看容器是否处于运行状态,若失败,可以查看日志
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)
8.问题
(1)

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

(3)删除容器
如果你要删除的 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)
(4)设置防火墙
sudo firewall-cmd --permanent --zone=public --add-service=http s sudo firewall-cmd --permanent --zone=public --add-service=https s sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp s sudo firewall-cmd --reload
(5)linux中关闭selinux的方法
1、临时关闭:输入命令setenforce 0,重启系统后还会开启。
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。

(6)vmware安装centos7开机黑屏死机的问题

导致问题:
1.直接就是黑屏,连杠杠都没有
2.centos系统关不掉
3.关闭vmware提示:虚拟机XXX繁忙
解决方式:
1.强制关闭vmware,重启计算机(不重启虚拟机重新开提示占用,网上删.lck方式试过没用)
2.编辑虚拟机设置


(7)docker 阿里云镜像加速器配置好之后会报错
job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" fro details.
没有解决

浙公网安备 33010602011771号