Docker 化部署 .NET 8 網(wǎng)站 + MySQL (含數(shù)據(jù)庫(kù)初始化)
1. 準(zhǔn)備工作環(huán)境
你有一臺(tái) Linux 主機(jī)(或支持 Docker 的機(jī)器)
已安裝好 Docker 和 Docker Compose
參考安裝文檔:https://docs.docker.com/engine/install/
https://docs.docker.com/compose/install/你的網(wǎng)站發(fā)布文件已準(zhǔn)備好,放在某個(gè)目錄(示例用
webfuture/
)你有數(shù)據(jù)庫(kù)備份文件
webfuture.sql
2. 創(chuàng)建項(xiàng)目目錄結(jié)構(gòu)
假設(shè)你的工作目錄是 /home/user/docker-webfuture
,進(jìn)入該目錄:
mkdir -p /home/user/docker-webfuture/webfuture cd /home/user/docker-webfuture
把網(wǎng)站發(fā)布文件全部復(fù)制到 webfuture/
目錄,比如:
cp -r /var/www/webfuture/* ./webfuture/
把數(shù)據(jù)庫(kù)備份 webfuture.sql
也放到當(dāng)前目錄:
cp /path/to/webfuture.sql .
3. 創(chuàng)建 Dockerfile
在 /home/user/docker-webfuture/
目錄創(chuàng)建 Dockerfile
,內(nèi)容如下:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app COPY webfuture/ . EXPOSE 80 ENV ASPNETCORE_URLS=http://+:80 ENTRYPOINT ["dotnet", ""]
這里假設(shè)你的主程序集名是
WebFuture.dll
,如果不一樣請(qǐng)?zhí)鎿Q為正確文件名。
4. 創(chuàng)建 docker-compose.yml
在同目錄創(chuàng)建 docker-compose.yml
:
version: '3.8' services: db: image: mysql:8.0 container_name: mysql-db restart: always environment: MYSQL_ROOT_PASSWORD: MYSQL_DATABASE: volumes: - mysql_data:/var/lib/mysql - ./webfuture.sql:/docker-entrypoint-initdb.d/webfuture.sql ports: - "3306:3306" web: build: context: . dockerfile: Dockerfile container_name: webfuture-app depends_on: - restart: always ports: - "8080:80" environment: ASPNETCORE_URLS: http://+:80 ConnectionStrings__DefaultConnection: "server=;port=;database=;user=;password=" volumes: mysql_data:
此處mysql數(shù)據(jù)庫(kù)信息需要做出對(duì)應(yīng)的變更,port端口,database數(shù)據(jù)庫(kù)名,user用戶名,password密碼根據(jù)實(shí)際情況調(diào)整,server設(shè)置為db不要更改,docker自動(dòng)拉取數(shù)據(jù)庫(kù)并且初始db實(shí)例,因此該參數(shù)無(wú)需變更。
5. 修改網(wǎng)站配置連接字符串
網(wǎng)站啟動(dòng)時(shí)需要連接數(shù)據(jù)庫(kù),連接字符串必須指向服務(wù)名
db
(MySQL容器名稱),不要用127.0.0.1
。
網(wǎng)站中的連接字符串配置文件 appsettings.json
,請(qǐng)修改:
"ConnectionStrings": { "DefaultConnection": "server=;port=3306;database=webfuture;user=root;password=root123" }
6. 構(gòu)建鏡像并啟動(dòng)服務(wù)
在 /home/user/docker-webfuture/
目錄執(zhí)行:
docker-compose up -d --build
--build
會(huì)強(qiáng)制重建鏡像容器啟動(dòng)后,MySQL 會(huì)自動(dòng)導(dǎo)入
webfuture.sql
(僅首次啟動(dòng)有效)
7. 驗(yàn)證服務(wù)
查看容器狀態(tài):
docker ps
查看 MySQL 日志是否正常初始化:
docker logs mysql-db
打開(kāi)瀏覽器訪問(wèn):
http://localhost:8080
訪問(wèn)你的網(wǎng)站,看是否能正常運(yùn)行并連接數(shù)據(jù)庫(kù)。
8. 后續(xù)維護(hù)
數(shù)據(jù)庫(kù)數(shù)據(jù)持久化保存在 Docker 卷
mysql_data
,重啟容器數(shù)據(jù)不會(huì)丟失。網(wǎng)站代碼變更后,重新復(fù)制文件并運(yùn)行:
docker-compose build web docker-compose up -d web
如果想停止并刪除所有容器和卷:
docker-compose down -v
總結(jié)
步驟 | 說(shuō)明 |
---|---|
準(zhǔn)備發(fā)布文件 | 把發(fā)布好的 .NET 網(wǎng)站放到 webfuture/ |
準(zhǔn)備數(shù)據(jù)庫(kù)備份 | webfuture.sql 放在項(xiàng)目根目錄 |
編寫 Dockerfile | 使用官方 .NET 8 運(yùn)行時(shí)基礎(chǔ)鏡像 |
編寫 docker-compose.yml | 定義網(wǎng)站服務(wù)和 MySQL 服務(wù),包含數(shù)據(jù)初始化 |
修改連接字符串 | 指向 MySQL 服務(wù)名 db |
啟動(dòng)服務(wù) | docker-compose up -d --build |
訪問(wèn)測(cè)試 | 訪問(wèn) http://localhost:8080 |