ASP.NET Core Docker容器部署
最简单的部署操作方式
1. 安装辅助工具
1.1 安装Git
sudo yum -y install git
安装完成后输入 git 命令查看
1.2 安装Nginx (这种部署方式暂时没用到)
参考文档:https://zhuanlan.zhihu.com/p/529008192
//预计1-5分钟
sudo yum install nginx
yum安装nginx失败显示没有可用安装包 需要先执行以下命令:
sudo yum install epel-release
自启并启动服务
sudo systemctl enable nginx
sudo systemctl start nginx
输入以下命令查看是否成功
nginx -t
1.3 安装Dotnet SDK
安装Dotnet SDK核心
//每台计算机只需要执行以此此操作
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安装Dotnet SDK 3.1
sudo yum install dotnet-sdk-3.1
安装成功后查看一下版本号:
dotnet --list-sdks
1.4 安装Docker
安装必要的依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新并安装 Docker-CE
sudo yum makecache fast
//不执行 添加软件源信息 下面命令会出错
sudo yum -y install docker-ce
查看docker版本,看下是否安装成功
docker --version
开启Docker服务
sudo service docker start
设置Docker开机启动
systemctl enable docker
启动Docker
systemctl start docker
1.4.1 检查Docker是否可以正常运行
运行hello-world镜像
检查docker是否可以正常运行(运行hello-world镜像,如果本机没有hello-world镜像,系统会自动拉取hello-world镜像)
docker run hello-world
查看镜像
docker images
查看容器
docker ps -a
删除容器 (必须先删除容器,再删除镜像,顺序不能乱)
docker rm + 容器名/容器ID
删除镜像
docker rmi + 镜像名字
2. 将后端项目部署到Docker中
2.1 传到GitHub,并git clone 到home文件夹下`
务必要将前端项目build生成后,放入后端项目的 wwwroot文件夹中,再上传到git服务器(我这里用的是github)
cd 到 home 路径下
cd /home
git clone https://github.com/填你账号名/填你自己仓库名.git
2.2 拷贝Dockerfile
如果根目录有了此文件,确认下是否正确
cd 到 项目路径下(DockerPublishOee),将Dockerfile文件拷贝
cd DockerPublishOee
以OeeIot项目为例,Dockerfile文件内容
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["OEE_IoT/OEE_IoT.csproj", "OEE_IoT/"]
COPY ["ZeroSoft.BLL/ZeroSoft.BLL.csproj", "ZeroSoft.BLL/"]
COPY ["ZeroSoft.DAL/ZeroSoft.DAL.csproj", "ZeroSoft.DAL/"]
COPY ["ZeroSoft.DBUtility/ZeroSoft.DBUtility.csproj", "ZeroSoft.DBUtility/"]
COPY ["ZeroSoft.Model/ZeroSoft.Model.csproj", "ZeroSoft.Model/"]
RUN dotnet restore "OEE_IoT/OEE_IoT.csproj"
COPY . .
WORKDIR "/src/OEE_IoT"
RUN dotnet build "OEE_IoT.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "OEE_IoT.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OEE_IoT.dll"]
执行下面 build 操作的时候会出现错误(如下):
COPY failed: forbidden path outside the build context
这是因为 Dockerfile文件 中的路径不对导致的。如果实在不知道什么问题,修改一次,build一次,慢慢尝试
2.3 执行构建镜像
cd DockerPublishOee
docker build -t laohu/apkimg .
完成后再执行 docker images 查看下
docker images
2.4 执行构建容器
docker run --name=apkcontainer -v /etc/localtime:/etc/localtime -it -p 8081:80 laohu/apkimg
:80 对应的是 Dockerfile 中的 EXPOSE 80
执行完之后,什么也没有,是因为我自己的项目将所有输出都删除了,你们自己项目应该是会输出一堆东西,我反正是等一段时间再去操作
我一开始用SqlServier2008R2,会报一些错误,是因为数据库版本太低
2.5 Docker启动
docker start apkcontainer
输入 docker ps -a 查看是否已经启动成功
docker ps -a
2.6 启动程序
- 后端服务地址:
http://192.168.0.14:8081/
- 前端登录页面:
http://192.168.0.14:8081/index.html