Docker 化部署 .NET 8 网站 + MySQL (含数据库初始化)
1. 准备工作环境
你有一台 Linux 主机(或支持 Docker 的机器)
已安装好 Docker 和 Docker Compose
参考安装文档:https://docs.docker.com/engine/install/
https://docs.docker.com/compose/install/你的网站发布文件已准备好,放在某个目录(示例用
webfuture/
)你有数据库备份文件
webfuture.sql
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 |