虚拟机:VMware 版本 :16.0.0 build-16894299
系统:Centos7 版本 :3.10.0-1127.el7.x86_64
ssh、ftp 工具 :MobaXterm
官方安装文档:https://docs.docker.com/engine/install/centos/
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
如果
yum
报告没有安装这些软件包,那也没关系
官网提供了三种安装方式:仓储安装、手动安装RPM包、脚本安装
我们采用推荐的 仓储方式
安装 yum-utils 工具包 (用来设置仓储地址)
sudo yum install -y yum-utils
更新 所有包和内核 (线上环境请慎重操作!),该命令一般用于新装的系统
yum -y update
设置 仓储地址 (国内推荐阿里云)
官网:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
阿里云:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看可安装的Docker版本
yum list docker-ce --showduplicates | sort -r
展示部分列表:
如果你需要安装特定的版本,请执行命令:
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
这里我们 直接安装最新版本:
sudo yum install docker-ce docker-ce-cli containerd.io
注意!!!:如果你之前已经安装了dotnet core 相关环境,这里可能会提示 某些包的冲突,你可以卸载掉有冲突的包,或者跳过错误
验证安装情况,查看当前docker 版本信息:
docker version
启动docker
sudo systemctl start docker
加入开机启动项:
sudo systemctl enable docker
官网安装文档:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
使用包管理器管理 .NET 安装时,如果之前安装了预览版本,则可能会遇到冲突。 包管理器可能会将非预览版本解释为 .NET 的较早版本。 若要安装非预览版本,需要首先卸载预览版本。 有关如何卸载 .NET 的详细信息,请参阅如何删除 .NET 运行时和 SDK。
查看已经安装的SDK和运行时
dotnet --list-sdks
dotnet --list-runtimes
微软官方同样也提供了三种安装方式 包管理器(dnf、yum)、脚本、手动安装
这里我们仍然采用推荐的包管理器安装
官网使用了新一代的包管理器 dnf (DNF(Dandified Yum)是新一代的RPM软件包管理器。)
但是Centos7并不自带 dnf,我们仍然使用 yum 进行安装
安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安装
sudo yum install dotnet-sdk-5.0
检查安装情况
dotnet --version
这里我们通过 dotnet 命令方式创建mvc项目,当然,你也可以通过VS进行创建,然后呢使用FTP工具上传。
创建示例MVC项目:
#这里我在 home目录下创建
cd /home
#创建一个名为 helloworld 的 mvc 项目
dotnet new mvc -n helloworld
#进入项目内
cd helloworld
#生成项目
#这里为了便于区分项目源码和生成文件,我将生成文件放到项目外(/home/publish)
dotnet build -o /home/publish
生成后的文件列表
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
我们需要在发布文件同目录下(publish)创建 一个 无后缀 的 名为 Dockerfile 的文件
Dockerfile文件内容:
# 设置基础镜像,这里将5.0运行时作为基础镜像
# as base 并没有特殊含义,相当于一个标记
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
# 配置工作目录
# WORKDIR指令为Dockerfile中的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD指令设置工作目录。
# 如果WORKDIR不存在,即使在后续的Dockerfile指令中不使用它,也会创建它。
WORKDIR /app
# 复制文件到工作目录
# 这里啰嗦几句,下面一句的意思是将 上下文 中的文件 拷贝到 Docker内部
# 在不指定上下文目录的情况下,可以认为 Dockerfile 所在的目录就是 上下文
COPY . .
# 配置系统环境变量
# 利用环境变量 设置 ASP.net core 应用的监听地址
ENV ASPNETCORE_URLS http://0.0.0.0:5000
# 执行 dotnet 命令 启动 应用
ENTRYPOINT ["dotnet","helloworld.dll"]
我们在 dockerfile 文件所在目录(puclish) 执行创建 docker 镜像的操作
# 创建一个名为mymvc 标签 v1 的镜像,最后的 . 表示在当前上下文中构建
# 这里的镜像名称必须是小写
docker build -t mymvc:v1 .
执行结果:
经过事先在Dockerfile文件中定义的五个步骤,我们成功创建了自己的镜像。
查看我们构建的镜像:
docker images
# -d 以后台运行的方式
# -p 将centos 中的 8080 端口 映射到 容器中的 5000 端口
# --name 将容器命名为 myapp
docker run -d -p 8080:5000 --name myapp mymvc:v1
查看我们新建的容器:
# docker ps 查看正在运行的容器
# docker ps -a 查看正在运行的容器和历史记录
docker ps
如果你需要 镜像自动启动,那么加入 --restart=always
例:
docker run -d -p 8080:5000 --restart=always --name myapp mymvc:v1
至此,我们已经成功创建了 Docker容器,并运行了我们的MVC 程序
下面我们来验证
如果你使用的是命令窗口,那么执行:
curl http://localhost:8080
将成功输出一个 Html 页面源码:
如果你需要在虚拟机外的浏览器进行访问(假设你的虚拟机网络已经配置好),那么不要忘记将 8080 端口放行
# 开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 配置立即生效
firewall-cmd --reload
在主机进行访问的结果:
注:这里没有样式,是因为 我没有 把 wwwroot 目录复制到编译文件中 ,如果你是从Vs 中发布的 文件,将不会出现这个问题
原文:https://www.cnblogs.com/527fanqie/p/14884032.html