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容器編排。

@天才臥龍的波爾卡

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