.net core入门37:使用docker-compose批量部署asp.net core应用程序

3 篇文章 0 订阅

环境:

  • window10
  • centos8.2最小化安装
  • Microsoft Visual Studio Enterprise 2019 版本 16.8.3
  • docker-ce.x86_64 engine: 20.10.6
  • asp.net core 3.1

背景:

在上一篇《.net core入门36:使用docker部署asp.net core应用程序》中,介绍了如何部署部署asp.net core应用到docker中。但是,我们发现每次程序的更新都需要手动停止、删除、构建镜像、启动容器实例等一系列的操作,并且当系统采用微服务模式开发时,更新多个应用的过程就更繁琐了。

docker提供了docker-compose方便这一操作。

一、安装docker-compose

我们可以查看github上的版本,然后下载。
这里我下载的是1.29.1,执行命令如下:

[root@bogon /]# curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0    850      0 --:--:-- --:--:-- --:--:--   849
100 12.1M  100 12.1M    0     0  82923      0  0:02:33  0:02:33 --:--:--  101k
[root@bogon /]# ll /usr/local/bin
总用量 12432
-rw-r--r--. 1 root root 12728384 5月  13 11:06 docker-compose
[root@bogon /]# 

如果速度较慢,可换地址

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

下载完成后,需要赋予docker-compose文件可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

验证安装:

[root@bogon /]# docker-compose --version
docker-compose version 1.29.1, build c34c88b2
[root@bogon /]#

二、使用docker-compose部署多应用

现在,我们计划使用docker-compose部署三个应用,一个是redis的官方镜像,另外两个是.net core 3.1的web程序。

2.1 准备一个.net core3.1的空web项目

首先,准备一个空的.net core 3.1程序:WebApplication1,发布后如下:
在这里插入图片描述
在这个目录内新建docker-file文件:Dockerfile-demo,内如如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic
EXPOSE 80
WORKDIR /app
COPY .  /app
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

2.2 准备linux上的目录

在linux上新建目录:/test,并将上面发布的文件夹拷贝到/test/WebApplication1内。

2.3 准备docker-compose文件

在linux的/test目录下新建文件:docker-compose.yml文件,如下:

version: "3.3"
services:
  webapplicationa:
    image: webapplicationa
    build: 
      context:  ./WebApplication1
      dockerfile: Dockerfile-demo
    container_name: webapplicationa
    ports:
        - 5000:5000
    environment:
        - ASPNETCORE_ENVIRONMENT=Development
    volumes:
      - /etc/localtime:/etc/localtime

  webapplicationb:
    image: webapplicationb
    build: 
      context:  ./WebApplication1
      dockerfile: Dockerfile-demo
    container_name: webapplicationb
    ports:
        - 6000:5000
    environment:
        - ASPNETCORE_ENVIRONMENT=Development
    volumes:
      - /etc/localtime:/etc/localtime 
  
  redis:
    image: redis:6.0
    container_name: redis
    ports:
        - 6379:6379    

2.4 构建并运行应用

将目录切换到:/test下,然后执行:docker-compose build进行镜像构建:

[root@bogon test]# docker-compose build
redis uses an image, skipping
Building webapplicationa
Sending build context to Docker daemon    318kB
Step 1/6 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
3.1: Pulling from dotnet/core/aspnet
69692152171a: Pull complete 
6142a500eec7: Pull complete 
98e06df84f9c: Pull complete 
ebbd8772c8dd: Pull complete 
9c620bc3b6b2: Pull complete 
Digest: sha256:1083a55ced614a1627ace0c2e9dec9c458b2b06968cf81b3e33888e373e8d103
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> 03f4ba024b69
Step 2/6 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic
3.1-bionic: Pulling from dotnet/core/sdk
01bf7da0a88c: Pull complete 
f3b4a5f15c7a: Pull complete 
57ffbe87baa1: Pull complete 
05dbc3319a7f: Pull complete 
df9876b4a6be: Pull complete 
1824876b979d: Pull complete 
7fc0ca49032c: Pull complete 
47d259c596cf: Pull complete 
5b12036e6c81: Pull complete 
Digest: sha256:1c614d98594d6e4cef2aed3c5c92a33b10daf413397b642b74f05041551c010e
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/sdk:3.1-bionic
 ---> 668993052570
Step 3/6 : EXPOSE 80
 ---> Running in e454a1b87d64
Removing intermediate container e454a1b87d64
 ---> bbe82b4e8b7a
Step 4/6 : WORKDIR /app
 ---> Running in 4902e8aebbb3
Removing intermediate container 4902e8aebbb3
 ---> d7d3cbb6ac29
Step 5/6 : COPY .  /app
 ---> 8b454f016f5e
Step 6/6 : ENTRYPOINT ["dotnet", "WebApplication1.dll"]
 ---> Running in b4f1734f6e9f
Removing intermediate container b4f1734f6e9f
 ---> 54b8a42116fc
Successfully built 54b8a42116fc
Successfully tagged webapplicationa:latest
Building webapplicationb
Sending build context to Docker daemon    318kB
Step 1/6 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> 03f4ba024b69
Step 2/6 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic
 ---> 668993052570
Step 3/6 : EXPOSE 80
 ---> Using cache
 ---> bbe82b4e8b7a
Step 4/6 : WORKDIR /app
 ---> Using cache
 ---> d7d3cbb6ac29
Step 5/6 : COPY .  /app
 ---> Using cache
 ---> 8b454f016f5e
Step 6/6 : ENTRYPOINT ["dotnet", "WebApplication1.dll"]
 ---> Using cache
 ---> 54b8a42116fc
Successfully built 54b8a42116fc
Successfully tagged webapplicationb:latest
[root@bogon test]# 

构建完成后,启动容器:docker-compose up -d

[root@bogon test]# docker-compose up -d
Pulling redis (redis:6.0)...
6.0: Pulling from library/redis
69692152171a: Already exists
a4a46f2fd7e0: Pull complete
bcdf6fddc3bd: Pull complete
2deb8958a858: Pull complete
10d2f5c26490: Pull complete
d040d72a588c: Pull complete
Digest: sha256:71909943bb7ca4b34b6b151e7b29c608ddae654cdc9a1d2d15f30df666b3a805
Status: Downloaded newer image for redis:6.0
Creating webapplicationa ... done
Creating webapplicationb ... done
Creating redis           ... done
[root@bogon test]#

以后,我们需要更新时,就在这个目录里重复执行以下命令:

docker-compose build
docker-compose up -d

注意: redis服务用的是外部镜像,只有docker-compose up的时候才会初始化,而且如果不改配置文件,redis应用不会被更新(为了数据的安全性,你可能需要将redis的部署配置和自身应用的配置分割开,以避免redis被覆盖了,导致数据丢失)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值