Docker 化部署 .NET 8 网站 + MySQL (含数据库初始化)

来源:本站原创 点击数: 发布时间:2025年07月30日

1. 准备工作环境


2. 创建项目目录结构

假设你的工作目录是 /home/user/docker-webfuture,进入该目录:

mkdir -p /home/user/docker-webfuture/webfuture
cd /home/user/docker-webfuture

把网站发布文件全部复制到 webfuture/ 目录,比如:

cp -r /var/www/webfuture/* ./webfuture/

把数据库备份 webfuture.sql 也放到当前目录:

cp /path/to/webfuture.sql .

3. 创建 Dockerfile

/home/user/docker-webfuture/ 目录创建 Dockerfile,内容如下:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY webfuture/ .
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
ENTRYPOINT ["dotnet", ""]
  • 这里假设你的主程序集名是 WebFuture.dll,如果不一样请替换为正确文件名。


4. 创建 docker-compose.yml

在同目录创建 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数据库信息需要做出对应的变更,port端口,database数据库名,user用户名,password密码根据实际情况调整,server设置为db不要更改,docker自动拉取数据库并且初始db实例,因此该参数无需变更。


5. 修改网站配置连接字符串

网站启动时需要连接数据库,连接字符串必须指向服务名 db(MySQL容器名称),不要用 127.0.0.1

网站中的连接字符串配置文件 appsettings.json,请修改:

"ConnectionStrings": {
  "DefaultConnection": "server=;port=3306;database=webfuture;user=root;password=root123"
  }

6. 构建镜像并启动服务

/home/user/docker-webfuture/ 目录执行:

docker-compose up -d --build
  • --build 会强制重建镜像

  • 容器启动后,MySQL 会自动导入 webfuture.sql (仅首次启动有效)


7. 验证服务

  • 查看容器状态:

docker ps
  • 查看 MySQL 日志是否正常初始化:

docker logs mysql-db
  • 打开浏览器访问:

http://localhost:8080
  • 访问你的网站,看是否能正常运行并连接数据库。


8. 后续维护

  • 数据库数据持久化保存在 Docker 卷 mysql_data,重启容器数据不会丢失。

  • 网站代码变更后,重新复制文件并运行:

docker-compose build web
docker-compose up -d web
  • 如果想停止并删除所有容器和卷:

docker-compose down -v

总结

步骤说明
准备发布文件把发布好的 .NET 网站放到 webfuture/
准备数据库备份webfuture.sql 放在项目根目录
编写 Dockerfile使用官方 .NET 8 运行时基础镜像
编写 docker-compose.yml定义网站服务和 MySQL 服务,包含数据初始化
修改连接字符串指向 MySQL 服务名 db
启动服务docker-compose up -d --build
访问测试访问 http://localhost:8080