使用Docker在Linux环境中部署应用

部署方案

步骤

  • 本地搭建Docker环境
  • 本地编译出Docker镜像
  • 将编译出的Docker镜像上传至仓库
  • 登录云主机从仓库上下载镜像
  • 上传本地运行环境到云主机
  • 云主机运行镜像
  • 本地访问网站

本文假设上传镜像的私有仓库为:

  • xx.x.xx.xxxx

本文假设部署的云主机为:

  • xx.x.xx.xxxx

本地搭建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

本地访问网站

  • 登录云主机IP:端口,访问对应网站
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容