部署方案
步骤
- 本地搭建Docker环境
- 本地编译出Docker镜像
- 将编译出的Docker镜像上传至仓库
- 登录云主机从仓库上下载镜像
- 上传本地运行环境到云主机
- 云主机运行镜像
- 本地访问网站
本文假设上传镜像的私有仓库为:
本文假设部署的云主机为:
本地搭建Docker环境
- 必须Win10系统
- 进入Bios,选项中找到虚拟化(virtual),设为Enable
- 安装Docker for Windows Installer
- 在Docker设置中加上指定的私有仓库,例:
xx.x.xx.xxxx
可能会遇到的坑
- 问题一:拉取国外镜像的时候,拉不下来,时间超时了,可以找个稳定的国内镜像
- 问题二:在编写Dockerfile文件,尤其注意文件的路径是否正确
- 问题三:上传配置文件的时候,注意配置文件的IP是否已经修改
- 问题四:在编译migration镜像的时候,记得看一下工程中是否已经生成了_init文件,目前立武已经帮大家都弄好了
- 问题五:在本地编写镜像的时候,可以一个个镜像分开编。因为整个工程编镜像的时候会比较久,不容易定位问题
- 问题六:当遇到db.lock问题时候,找到对应路径下,把db.lock文件删除即可
- 问题七:建议拉取高版本的数据库镜像
编写Dockerfile文件
编写migrator的Dockerfile_linux,放入Migrator文件夹中
FROM microsoft/dotnet:latest AS publish
WORKDIR /src
COPY ./ .
WORKDIR ./
RUN dotnet restore
RUN dotnet publish -c Release -o /app
COPY . .
FROM publish AS final
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Migrator.dll"]
编写host的Dockerfile_linux,放入Host文件夹中
FROM microsoft/dotnet:latest AS publish
WORKDIR /src
COPY ./src/services/ .
WORKDIR ./src/Web.Host
RUN dotnet restore
RUN dotnet publish -c Release -o /app
COPY . .
FROM publish AS final
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Web.Host.dll"]
编写web的Dockerfile_linux
FROM node AS builder
WORKDIR /web
COPY ./src/web/ .
RUN npm i
RUN npm run build --prod
FROM nginx AS final
WORKDIR /usr/share/nginx/html
COPY --from=builder ./web/dist/. /usr/share/nginx/html
编写docker-compose.yml
version: '3'
services:
db:
image: docker.io/mysql
environment:
- MYSQL_ROOT_PASSWORD=******
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql
webois.migrator:
image: IP:端口/webois/migrator
build:
context: .
dockerfile: src/services/src/Migrator/Dockerfile_linux
volumes:
- "./settings/migrator/appsettings.json:/app/appsettings.json"
depends_on:
- db
links:
- db
webois.host:
image: IP:端口/host
environment:
- ASPNETCORE_ENVIRONMENT=Staging
build:
context: .
dockerfile: src/services/src/Host/Dockerfile_linux
ports:
- "IP:端口"
volumes:
- "./settings/host/appsettings.json:/app/appsettings.json"
- "./settings/host/appsettings.Staging.json:/app/appsettings.Staging.json"
depends_on:
- db
links:
- db
webois.web:
image: IP:端口/web
build:
context: .
dockerfile: src/web/Dockerfile_linux
ports:
- "80:80"
volumes:
- "./settings/web/appconfig.json:/usr/share/nginx/html/assets/appconfig.json"
- "./settings/web/nginx.conf:/etc/nginx/nginx.conf"
- "./settings/web/outputs/:/web/dist/"
编写linux环境下编译镜像,并push指定仓库的.bat脚本
注释:设置指定仓库
::set DOCKER_REGISTRY= IP:端口
set DOCKER_REGISTRY=IP:端口
prompt $P$G$T$G
::delete old images
docker rmi %DOCKER_REGISTRY%/webois/host
REM ::build
docker-compose -f docker-compose.yml build
powershell -Command "docker images -f "dangling=true" -q | foreach-object{ docker rmi $_}"
::push image to private registry
docker-compose -f docker-compose.yml push
上传docker-compose文件和本地运行环境到云主机
- 使用xshell工具登录云主机
- 上传docker-compose文件,和setting文件夹
登录云主机从仓库上下载镜像
- 登录云主机
ssh 用户名@IP
- 用户名:ubuntu
- pwd:ubuntu
- 上传setting文件中的配置文件
- 上传compose文件
- 注意:请将docker-compose中的build部分去掉,在本地编译的时候已经build。
云主机运行镜像
- 先停止镜像
docker-compose down
- 再重启镜像
docker-compose up -d
查看run的容器
- 查看容器的状态,有没有退出的,除了migration的容器
- 指令:
docker ps -a
本地访问网站