Docker 部署 Microsoft SQL Server 指南_docker sqlserver
文章目录
- 部署方案对比
- 一、Docker 命令行方式
-
- 1. 拉取官方镜像
- 2. 创建本地数据目录(用于持久化)
- 3. 运行容器命令(最关键的步骤)
-
- 3.1 参数说明表
- 3.2 密码复杂度要求
- 4. 检查容器状态
- 5. 查看日志以排查问题
- 6. 连接测试
- 二、Docker Compose 方式
-
- 1. 创建项目目录和文件
- 2. 创建 docker-compose.yml 文件
- 3. 启动容器
- 总结
部署方案对比
.env
文件隔离敏感信息一、Docker 命令行方式
这种方式直接使用 docker run
命令,适合快速测试和简单部署
1. 拉取官方镜像
从 Microsoft Container Registry 拉取 SQL Server 2022 的最新 Linux 镜像
docker pull mcr.microsoft.com/mssql/server:2022-latest
- 注意:如需其他版本(如 2019),将标签改为
:2019-latest
2. 创建本地数据目录(用于持久化)
为了避免容器删除后数据丢失,需要在宿主机上创建一个目录来映射容器内的数据存储位置
mkdir -p /usr/local/docker/sqlserver/data
3. 运行容器命令(最关键的步骤)
docker run -d \\ --name sql-server \\ -e \"ACCEPT_EULA=Y\" \\ -e \"MSSQL_SA_PASSWORD=sqlserver@7740\" \\ -e \"MSSQL_PID=Developer\" \\ -p 1433:1433 \\ -v /usr/local/docker/sqlserver/data:/var/opt/mssql \\ --memory=\"4g\" \\ --restart unless-stopped \\ --user root \\ mcr.microsoft.com/mssql/server:2019-latest
3.1 参数说明表
-d
--name sql-server
-e \"ACCEPT_EULA=Y\"
-e \"MSSQL_SA_PASSWORD=...\"
-e \"MSSQL_PID=Developer\"
-p 1433:1433
-v /host/path:/var/opt/mssql
--memory=\"4g\"
--restart unless-stopped
3.2 密码复杂度要求
- 长度至少8个字符
- 包含以下字符类型中的至少三种:
- 大写字母(A-Z)
- 小写字母(a-z)
- 数字(0-9)
- 特殊符号(如!@#$%^&*)
4. 检查容器状态
运行后,使用以下命令查看容器是否成功启动:
docker ps
- 如果状态(STATUS)显示为
Up ...
,则表示运行成功。如果显示为Exited
,说明启动失败,需要查看日志
5. 查看日志以排查问题
- 错误示例
docker logs sql-server
- 常见启动失败原因:
- 密码不符合复杂性要求
- 没有设置
ACCEPT_EULA=Y
- 宿主机端口已被占用(更改
-p
参数即可) - 配置的挂载目录没有访问权限
sudo chmod -R 777 /usr/local/docker/sqlserver/data
6. 连接测试
容器运行后,你可以使用任何客户端工具连接
- 服务器:
ip
- 身份验证: SQL Server 身份验证
- 登录名:
sa
- 密码: 你在
MSSQL_SA_PASSWORD
中设置的密码 - 端口: 如果你映射的是
1433
,直接使用即可
常用管理命令:
* 停止容器: docker stop sql-server* 启动容器: docker start sql-server* 重启容器: docker restart sql-server* 进入容器内部bash: docker exec -it sql-server bash* 删除容器 (⚠️ **会丢失未持久化的数据**): docker rm -f sql-server
二、Docker Compose 方式
这种方式使用一个 docker-compose.yml
文件来声明所有配置,更清晰、易于版本控制和复用,特别适合复杂应用和多环境部署
1. 创建项目目录和文件
cd /usr/localsudo mkdir -p /docker/sql-server && cd /docker/sql-servermkdir data && sudo chmod -R 777 data
2. 创建 docker-compose.yml 文件
需要提前创建
docker
网络:docker network create fc
使用文本编辑器创建该文件,并填入以下内容:
services: mssql: image: mcr.microsoft.com/mssql/server:2019-latest container_name: sqlserver environment: - ACCEPT_EULA=Y - MSSQL_PID=Developer - MSSQL_SA_PASSWORD=sqlserver@7740 ports: - \"1433:1433\" volumes: - mssql_data:/var/opt/mssql # 使用命名卷 restart: unless-stopped mem_limit: 4g mem_reservation: 2g cpus: 2.0 networks: - fcvolumes: mssql_data: # 定义命名卷networks: fc: external: true
配置项说明表
image
mcr.microsoft.com/mssql/server:2022-latest
environment
ACCEPT_EULA=Y
, MSSQL_SA_PASSWORD=...
ports
\"1433:1433\"
volumes
mssql_data:/var/opt/mssql
mem_limit
4g
networks
(可选)创建 .env
文件管理敏感信息
为了避免将密码硬编码在 YAML 文件中,可以创建一个 .env
文件(与 docker-compose.yml
同目录):
# .env fileMSSQL_SA_PASSWORD=sqlserver@7740
然后修改 docker-compose.yml
中的 MSSQL_SA_PASSWORD
一行:
- MSSQL_SA_PASSWORD=${MSSQL_SA_PASSWORD}
或者
env_file: - .env # 将密码移出docker-compose文件
Docker Compose 会自动读取同目录下的 .env
文件并注入变量
3. 启动容器
启动容器前,注意开放防火墙端口:
# 如果使用 firewalldsudo firewall-cmd --add-port=1433/tcp --permanentsudo firewall-cmd --reload
然后在包含 docker-compose.yml
文件的目录下,执行:
docker compose up -d
-d
同样表示在后台运行- 这个命令会自动拉取镜像(如果本地没有)、创建定义的卷、网络,并启动所有服务
总结
./data
),管理更方便.env
文件隔离敏感信息,更安全docker start/stop/rm
docker-compose up/down/start/stop
(基于项目)run
命令中直接指定PS:如果遇到数据卷挂载权限问题,可以选择使用
user:root
或者直接创建数据卷由docker
自动管理