十年河東,十年河西,莫欺少年窮
學無止境,精益求精
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容器編排。
@天才臥龍的波爾卡