docker-compose 编排Net6项目,redis/mysql/nlog实战 netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

1、新建 net6 webapi项目

一个非常简单的net6项目,使用mysql数据库,redis做缓存

 

 

 关于项目的搭建,这里不做说明,本篇主要讲解docker-compose容器编排

2、项目的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:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY . .
ENTRYPOINT ["dotnet", "WebMySql.dll"]

3、将项目发布,项目文件传至linux服务器

采用scp命令传递文件

 

 

 4、拉取mysql5.7 和 redis 镜像

此步骤省略,采用docker pull 指令

 

 

 5、docker build 生成web项目镜像

此步骤省略

可参考:netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案

 docker build -f Dockerfile  -t webapp:1.0 .

6、编写docker-compose.yml文件

在 /home/yaml/目录下创建该文件

version: "3.9"
services:
  webapp: #服务名称
    image: webapp:1.0 #所使用的镜像名称  
    container_name: myWebApp
    restart: always #开机启动
    ports: #端口映射
      - 8083:80   #左边为宿主机端口 右边为容器端口
      - 1433:433   #左边为宿主机端口 右边为容器端口
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/myWebApp/appsettings.json:/app/appsettings.json  #项目配置文件
      - /home/docker/volumes/myWebApp/logs:/app/logs  #Nlog日志
    depends_on: #依赖的服务
      - Redis    #对应下面服务的名称
      - Mysql    #对应下面服务的名称
  Redis: #服务名称
    image: redis #所使用的镜像名称
    container_name: myredis
    restart: always #开机启动
    ports:         #端口映射
      - 6379:6379
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/redis/redis.conf:/etc/redis/redis.conf
      - /home/docker/data/redis/data:/data  
    command:
      /bin/bash -c "redis-server /etc/redis/redis.conf"
  Mysql: #第二个服务名称
    restart: always
    image: mysql:5.7 #所使用的镜像名称
    container_name: mysql01
    environment:
      MYSQL_HOST: mysql
      MYSQL_ROOT_PASSWORD: chch123 
      MYSQL_USER: chenwolong
      MYSQL_PASSWORD: ch12345678
      MYSQL_DATABASE: Student
      TZ: Asia/Shanghai  #时区
    ports:         #端口映射
      - 3307:3306
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/mysql/conf/my.cnf:/etc/my.cnf
      - /home/docker/data/mysql/data:/var/lib/mysql
    command: --default_authentication_plugin=mysql_native_password #解决外部无法访问
networks:
  appNet:

7、创建挂载的文件【不可少,否则执行docker-compose up -d 时会失败】

通过rouch 或 vim 指令创建挂载的文件,并填充配置内容

其中redis.conf 可以不填充

/home/docker/volumes/myWebApp/appsettings.json
/home/docker/volumes/redis/redis.conf
/home/docker/volumes/mysql/conf/my.cnf

appsettings.json 内容如下:【注意配置文件中的两个连接字符串】

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "studentDbContext": "Server=mysql01;Port=3307;Database=Student;Uid=root;Pwd=chch123;"
  },
  "RedisConnectionString": "myredis:6379,allowadmin=true", // 
  "RedisDbNum": 0
}

my.cnf 内容如下:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

8、目录定位到 docker-compose.yml 所在的目录,编排容器

 

 9、进入mysql 容器,查看容器是否创建成功

进入容器

docker exec -it d94ca7bb1f2d /bin/bash

连接mysql,需输入root庄户密码

mysql -uroot -p

执行mysql命令

show databases;

 

 10、查看挂载是否成功

在docker-compose.yml文件中,项目日志挂载到了/home/docker/volumes/myWebApp/logs 路径

 

 日志挂载成功

11、运行项目

 

 这样Net6项目就成功部署在了docker,使用了compose容器编排。

@天才卧龙的波尔卡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章