docker 容器化部署sql server2022 (数据持久化部署)
一,部署测试系统环境
操作系统:Rocky Linux 9.1
Docker version: 20.10.22, build 3a2c30b
Docker Compose version: v2.27.0
资源要求参考官方说明:Docker:安装适用于 Linux 上的 SQL Server 的容器 - SQL Server | Microsoft Learn
二,镜像获取
microsoft官方数据源获取:docker pull mcr.microsoft.com/mssql/server:2022-latest
三,部署前工作准备
3.1 新建数据目录:用于数据持久化
建立数据目录:mkdir -p /home/sql/sqlserver/data
确保 Docker 守护进程有权限访问该目录:chmod -R 777 /home/sql/sqlserver/data
3.2 端口开放
sql sqlserver默认使用端口:1433 ,容器内运行时需使用此端口。容器内其他镜像不能使用这个端口。
容器外可以配置1433映射到容器内1433。亦可配置其他端口映射比如:5433:1433。容器外分配的端口也不能被其他服务占用。
分配好端口后需在防火墙上开启(开放宿主机端口):
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent sudo firewall-cmd --reload
四,部署
4.1,docker直接容器运行
4.1.1容器建立运行命令
docker run --restart=always \ -v /home/sql/sqlserver/data:/var/opt/mssql \ -e 'ACCEPT_EULA=Y' \ -e "MSSQL_SA_PASSWORD=" \ -p 1433:1433 \ --name sqlserver \ -d mcr.microsoft.com/mssql/server:2022-latest
4.1.2参数说明
--restart=always:设置容器的重启策略为“始终”,即容器停止时会自动重启。
-v /home/sql/sqlserver/data:/var/opt/mssql:将主机的 `/home/sql/sqlserver/data` 目录挂载到容器的 `/var/opt/mssql` 目录,实现数据持久化。
-e 'ACCEPT_EULA=Y':设置环境变量,接受 SQL Server 的最终用户许可协议。
-e "MSSQL_SA_PASSWORD=":设置环境变量,指定 SQL Server 的系统管理员(SA)账户密码。请将 `` 替换为实际的密码。
-p 1433:1433:将主机的 1433 端口映射到容器的 1433 端口,允许外部通过该端口访问 SQL Server 服务。
--name sqlserver:为容器指定名称为 `sqlserver`,方便后续管理。
-d:以后台模式运行容器,即容器启动后不会占用当前终端。
mcr.microsoft.com/mssql/server:2022-latest:指定使用 Microsoft 的官方 SQL Server 2022 镜像的最新版本。
4.1.3 查询容器状态
运行命令:docker ps -a
结果:
状态显示为UP 即为正常,其他状态需排查日志
docker logs sqlserver
根据日志内容排查相关问题。
4.2 docker-compose 容器编排
4.2.1 建立docker-compose 编排文件
services: sqlserver: image: mcr.microsoft.com/mssql/server:2022-latest container_name: sqlserver hostname: sqlserver environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "yourpassword" MSSQL_COLLATION: "Chinese_PRC_CI_AS" ports: - "1433:1433" volumes: - /home/sql/sqlserver/data:/var/opt/mssql/data - /home/sql/sqlserver/data/log:/var/opt/mssql/log - /home/sql/sqlserver/data/backup:/var/opt/mssql/backup restart: always
4.2.2 参数说明
### 1. **`image`**
- `image: mcr.microsoft.com/mssql/server:2022-latest`
- 该字段指定使用的 Docker 镜像。这里使用的是 Microsoft 提供的 SQL Server 2022 最新版本镜像。
### 2. **`container_name`**
- `container_name: sqlserver`
- 该字段指定容器的名称。您可以使用 `sqlserver` 来引用该容器。
### 3. **`hostname`**
- `hostname: sqlserver`
- 容器内的主机名,通常用于容器之间的通信,或者在配置文件中作为容器的标识。
### 4. **`environment`**
- `ACCEPT_EULA: "Y"`
- 设置 SQL Server 的许可协议(EULA)为已接受,必须设置为 "Y" 来接受许可协议。
- `MSSQL_SA_PASSWORD: "yourpassword"`
- 设置 SQL Server 系统管理员(SA)账户的密码。必须符合密码复杂性要求,通常需要至少 8 个字符,包括大写字母、小写字母、数字以及特殊字符。
- `MSSQL_COLLATION: "Chinese_PRC_CI_AS"`
- 设置 SQL Server 的排序规则(collation),这里设置为支持中文的 `Chinese_PRC_CI_AS`,即中国地区的大小写不敏感、区分重音的排序规则。
### 5. **`ports`**
- `ports: - "1433:1433"`
- 将容器的 1433 端口映射到宿主机的 1433 端口,这样外部可以通过宿主机的 1433 端口连接到 SQL Server 实例。
### 6. **`volumes`**
- `- /home/sql/sqlserver/data:/var/opt/mssql/data`
- 将宿主机的 `/home/sql/sqlserver/data` 目录挂载到容器的 `/var/opt/mssql/data` 目录,这用于持久化 SQL Server 数据文件(例如 `master.mdf` 等)。
- `- /home/sql/sqlserver/data/log:/var/opt/mssql/log`
- 将宿主机的 `/home/sql/sqlserver/data/log` 目录挂载到容器的 `/var/opt/mssql/log` 目录,这用于存储 SQL Server 的日志文件。
- `- /home/sql/sqlserver/data/backup:/var/opt/mssql/backup`
- 将宿主机的 `/home/sql/sqlserver/data/backup` 目录挂载到容器的 `/var/opt/mssql/backup` 目录,这用于存储 SQL Server 的备份文件。
### 7. **`restart`**
- `restart: always`
- 配置容器在停止后自动重启。`always` 表示容器无论因为什么原因停止,都会自动重启。
4.2.3 容器启动
配置目录下运行:docker-compose up -d
使用命令:docker ps -a 查看服务运行状态,如图为正常。
其他状态查看日志排查:
docker logs sqlserver
五,注意事项(比较重要)
以上操作均为测试环境测试结果,生成环境建议咨询DBA 后,在进行操作。