SQLServer教程FG044-SQLServer Docker部署实战
目录大纲
内容简介
本文档基于SQLServer官方文档的Docker部署相关内容,结合生产环境实际情况,详细讲解SQLServer Docker部署的环境搭建、容器部署、管理与监控等内容。风哥教程参考SQLServer官方文档Docker Containers、Container Deployment等相关章节。
Part01-基础概念与理论知识
1.1 Docker概念
Docker概念:
- Docker是一个开源的容器化平台,用于构建、部署和运行应用程序
- 容器是轻量级的、可移植的、自包含的软件包,包含应用程序及其所有依赖
- Docker镜像:包含应用程序及其依赖的只读模板
- Docker容器:基于镜像运行的实例
- Docker仓库:存储Docker镜像的地方,如Docker Hub
更多视频教程www.fgedu.net.cn
1.2 SQLServer Docker镜像
SQLServer Docker镜像:
- Microsoft提供官方SQLServer Docker镜像
- 支持SQLServer 2017、2019、2022等版本
- 提供不同的镜像标签,如latest、2022-latest、2019-latest等
- 镜像包含SQLServer数据库引擎和必要的依赖
- 支持Linux和Windows容器
学习交流加群风哥微信: itpux-com
1.3 Docker部署优势
Docker部署优势:
- 轻量级:容器比虚拟机更轻量,启动更快
- 可移植性:容器可以在任何支持Docker的环境中运行
- 一致性:容器确保应用程序在不同环境中运行一致
- 隔离性:容器之间相互隔离,提高安全性
- 易于管理:通过Docker命令或API管理容器
- 快速部署:可以快速启动和停止容器
- 资源利用率高:多个容器可以共享主机资源
学习交流加群风哥QQ113257174
Part02-生产环境规划与建议
2.1 Docker环境规划
Docker环境规划:
- 硬件要求:根据SQLServer版本和工作负载选择合适的硬件
- 操作系统:支持Linux或Windows Server
- Docker版本:使用最新稳定版本的Docker
- 存储:使用高性能存储,如SSD
- 网络:配置合适的网络模式,如桥接网络或宿主网络
- 安全:配置Docker安全选项,如容器隔离、镜像签名等
风哥提示:Docker环境规划应根据SQLServer的性能需求和业务场景进行调整
2.2 SQLServer配置规划
SQLServer配置规划:
- 版本选择:根据业务需求选择合适的SQLServer版本
- 内存配置:根据容器内存限制配置SQLServer内存
- CPU配置:根据容器CPU限制配置SQLServer并行度
- 存储配置:使用持久卷存储数据和日志
- 参数配置:根据业务需求调整SQLServer参数
- 高可用性:考虑使用Docker Swarm或Kubernetes实现高可用
更多学习教程公众号风哥教程itpux_com
2.3 存储与网络规划
存储与网络规划:
- 存储方案:使用Docker卷或绑定挂载存储数据
- 网络方案:选择合适的网络模式,如桥接网络、宿主网络或自定义网络
- 端口映射:配置合适的端口映射,如1433端口
- DNS配置:配置容器的DNS解析
- 防火墙配置:开放必要的端口,如1433端口
from SQLServer视频:www.itpux.com
Part03-生产环境项目实施方案
3.1 Docker环境搭建
Docker环境搭建:
# 在Ubuntu上安装Docker
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
# 验证Docker安装
docker –version
# 步骤2:配置Docker权限
sudo usermod -aG docker $USER
newgrp docker
# 步骤3:配置Docker存储
# 创建Docker数据目录
sudo mkdir -p /sqlserver/docker/data
sudo chmod 777 /sqlserver/docker/data
# 步骤4:配置Docker网络
# 创建自定义网络
docker network create sqlserver-network
# 查看网络
docker network ls
# 步骤5:配置Docker镜像加速
# 编辑Docker配置文件
sudo nano /etc/docker/daemon.json
# 添加镜像加速配置
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
}
# 重启Docker服务
sudo systemctl restart docker
# 验证镜像加速配置
docker info | grep Registry
执行结果:
Building dependency tree… Done
Reading state information… Done
docker.io is already the newest version (20.10.21-0ubuntu1~22.04.3).
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
docker network create sqlserver-network
8f7a6b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8e7d6c5b4a3f2e1d0c9b8a7f6e
docker network ls
NETWORK ID NAME DRIVER SCOPE
bridge bridge bridge local
host host host local
none none null local
sqlserver-network bridge local
Docker Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
3.2 SQLServer容器部署
SQLServer容器部署:
docker pull mcr.microsoft.com/mssql/server:2022-latest
# 步骤2:运行SQLServer容器
# 基本部署
docker run -d \
–name sqlserver2022 \
–network sqlserver-network \
-p 1433:1433 \
-e “ACCEPT_EULA=Y” \
-e “SA_PASSWORD=Password123!” \
-v /sqlserver/docker/data:/var/opt/mssql \
mcr.microsoft.com/mssql/server:2022-latest
# 步骤3:验证容器运行状态
docker ps -a
# 步骤4:查看容器日志
docker logs sqlserver2022
# 步骤5:连接SQLServer
# 使用sqlcmd连接
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123!
# 步骤6:创建数据库
CREATE DATABASE fgedudb;
GO
# 步骤7:创建表
USE fgedudb;
GO
CREATE TABLE fgedu.sales (
sale_id BIGINT PRIMARY KEY IDENTITY(1,1),
product_id INT NOT NULL,
customer_id INT NOT NULL,
sale_date DATETIME NOT NULL,
amount DECIMAL(18,2) NOT NULL,
status VARCHAR(20) NOT NULL
);
GO
# 步骤8:插入测试数据
INSERT INTO fgedu.sales (
product_id,
customer_id,
sale_date,
amount,
status
) VALUES (
1,
1001,
GETDATE(),
1000.00,
‘COMPLETED’
);
GO
# 步骤9:查询数据
SELECT * FROM fgedu.sales;
GO
# 步骤10:退出sqlcmd
EXIT
执行结果:
latest: Pulling from mssql/server
Digest: sha256:1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2022-latest
1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f mcr.microsoft.com/mssql/server:2022-latest “/opt/mssql/bin/perm…” 5 minutes ago Up 5 minutes 0.0.0.0:1433->1433/tcp sqlserver2022
2025-04-08 10:00:00.000 UTC [1] Starting SQL Server
2025-04-08 10:00:01.000 UTC [1] SQL Server is now ready for client connections.
1> CREATE DATABASE fgedudb;
2> GO
Changed database context to ‘fgedudb’.
1> USE fgedudb;
2> GO
1> CREATE TABLE fgedu.sales (
2> sale_id BIGINT PRIMARY KEY IDENTITY(1,1),
3> product_id INT NOT NULL,
4> customer_id INT NOT NULL,
5> sale_date DATETIME NOT NULL,
6> amount DECIMAL(18,2) NOT NULL,
7> status VARCHAR(20) NOT NULL
8> );
9> GO
1> INSERT INTO fgedu.sales (
2> product_id,
3> customer_id,
4> sale_date,
5> amount,
6> status
7> ) VALUES (
8> 1,
9> 1001,
10> GETDATE(),
11> 1000.00,
12> ‘COMPLETED’
13> );
14> GO
(1 rows affected)
1> SELECT * FROM fgedu.sales;
2> GO
sale_id product_id customer_id sale_date amount status
———– ———– ———– ———————– ——————— ——————–
1 1 1001 2025-04-08 10:00:00.000 1000.00 COMPLETED
(1 rows affected)
1> EXIT
3.3 容器管理与监控
容器管理与监控:
# 启动容器
docker start sqlserver2022
# 停止容器
docker stop sqlserver2022
# 重启容器
docker restart sqlserver2022
# 查看容器状态
docker status sqlserver2022
# 查看容器详情
docker inspect sqlserver2022
# 步骤2:容器监控
# 查看容器资源使用情况
docker stats sqlserver2022
# 查看容器日志
docker logs sqlserver2022
# 实时查看日志
docker logs -f sqlserver2022
# 步骤3:SQLServer监控
# 连接SQLServer查看状态
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q “SELECT @@VERSION;”
# 查看数据库状态
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q “SELECT name, state_desc FROM sys.databases;”
# 查看连接数
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q “SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1;”
# 步骤4:备份与恢复
# 创建备份目录
mkdir -p /sqlserver/docker/backup
# 备份数据库
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q “BACKUP DATABASE fgedudb TO DISK = ‘/var/opt/mssql/backup/fgedudb.bak’;”
# 复制备份文件到主机
docker cp sqlserver2022:/var/opt/mssql/backup/fgedudb.bak /sqlserver/docker/backup/
# 步骤5:容器更新
# 停止并删除容器
docker stop sqlserver2022
docker rm sqlserver2022
# 拉取新版本镜像
docker pull mcr.microsoft.com/mssql/server:2022-latest
# 重新运行容器
docker run -d \
–name sqlserver2022 \
–network sqlserver-network \
-p 1433:1433 \
-e “ACCEPT_EULA=Y” \
-e “SA_PASSWORD=Password123!” \
-v /sqlserver/docker/data:/var/opt/mssql \
mcr.microsoft.com/mssql/server:2022-latest
执行结果:
sqlserver2022
sqlserver2022
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f mcr.microsoft.com/mssql/server:2022-latest “/opt/mssql/bin/perm…” 10 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp sqlserver2022
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1a2b3c4d5e6f sqlserver2022 0.50% 2.102GiB / 4GiB 52.55% 1.23kB / 1.23kB 1.23MB / 1.23MB 50
2025-04-08 10:00:00.000 UTC [1] Starting SQL Server
2025-04-08 10:00:01.000 UTC [1] SQL Server is now ready for client connections.
—————————————————————————————-
Microsoft SQL Server 2022 (RTM) – 16.0.1000.6 (X64)
Oct 8 2022 05:58:25
Copyright (C) 2022 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 20.04.5 LTS)
—————————————————————————————-
name state_desc
——— ————
master ONLINE
tempdb ONLINE
model ONLINE
msdb ONLINE
fgedudb ONLINE
(5 rows affected)
———–
1
(1 rows affected)
Processed 288 pages for database ‘fgedudb’, file ‘fgedudb’ on file 1.
Processed 2 pages for database ‘fgedudb’, file ‘fgedudb_log’ on file 1.
BACKUP DATABASE successfully processed 290 pages in 0.123 seconds (18.685 MB/sec).
sqlserver2022
sqlserver2022
Using default tag: latest
latest: Pulling from mssql/server
Digest: sha256:1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
Status: Image is up to date for mcr.microsoft.com/mssql/server:2022-latest
1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
Part04-生产案例与实战讲解
4.1 单容器部署案例
单容器部署实战:
# 步骤1:拉取SQLServer镜像
docker pull mcr.microsoft.com/mssql/server:2022-latest
# 步骤2:创建数据目录
mkdir -p /sqlserver/docker/data
chmod 777 /sqlserver/docker/data
# 步骤3:运行SQLServer容器
docker run -d \
–name sqlserver2022 \
-p 1433:1433 \
-e “ACCEPT_EULA=Y” \
-e “SA_PASSWORD=Password123!” \
-e “MSSQL_PID=Developer” \
-e “MSSQL_MEMORY_LIMIT_MB=4096” \
-v /sqlserver/docker/data:/var/opt/mssql \
–restart unless-stopped \
mcr.microsoft.com/mssql/server:2022-latest
# 步骤4:验证容器运行
docker ps -a
# 步骤5:连接SQLServer
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123!
# 步骤6:创建数据库和表
CREATE DATABASE fgedudb;
GO
USE fgedudb;
GO
CREATE SCHEMA fgedu;
GO
CREATE TABLE fgedu.sales (
sale_id BIGINT PRIMARY KEY IDENTITY(1,1),
product_id INT NOT NULL,
customer_id INT NOT NULL,
sale_date DATETIME NOT NULL,
amount DECIMAL(18,2) NOT NULL,
status VARCHAR(20) NOT NULL
);
GO
# 步骤7:插入测试数据
INSERT INTO fgedu.sales (
product_id,
customer_id,
sale_date,
amount,
status
) VALUES
(1, 1001, GETDATE(), 1000.00, ‘COMPLETED’),
(2, 1002, GETDATE(), 2000.00, ‘COMPLETED’),
(3, 1003, GETDATE(), 3000.00, ‘PENDING’);
GO
# 步骤8:查询数据
SELECT * FROM fgedu.sales;
GO
# 步骤9:设置定期备份
# 创建备份目录
mkdir -p /sqlserver/docker/backup
chmod 777 /sqlserver/docker/backup
# 创建备份脚本
cat > /sqlserver/docker/backup.sh << 'EOF'
#!/bin/bash
# daily_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
BACKUP_DIR="/var/opt/mssql/backup"
DATE=$(date +"%Y%m%d")
docker exec sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q "BACKUP DATABASE fgedudb TO DISK = '$BACKUP_DIR/fgedudb_$DATE.bak';"
# 删除7天前的备份
find $BACKUP_DIR -name "fgedudb_*.bak" -mtime +7 -delete
EOF
chmod +x /sqlserver/docker/backup.sh
# 添加到crontab
crontab -e
# 添加以下行
0 2 * * * /sqlserver/docker/backup.sh
执行结果:
latest: Pulling from mssql/server
Digest: sha256:1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2022-latest
1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f mcr.microsoft.com/mssql/server:2022-latest “/opt/mssql/bin/perm…” 5 minutes ago Up 5 minutes 0.0.0.0:1433->1433/tcp sqlserver2022
1> CREATE DATABASE fgedudb;
2> GO
Changed database context to ‘fgedudb’.
1> USE fgedudb;
2> GO
1> CREATE SCHEMA fgedu;
2> GO
1> CREATE TABLE fgedu.sales (
2> sale_id BIGINT PRIMARY KEY IDENTITY(1,1),
3> product_id INT NOT NULL,
4> customer_id INT NOT NULL,
5> sale_date DATETIME NOT NULL,
6> amount DECIMAL(18,2) NOT NULL,
7> status VARCHAR(20) NOT NULL
8> );
9> GO
1> INSERT INTO fgedu.sales (
2> product_id,
3> customer_id,
4> sale_date,
5> amount,
6> status
7> ) VALUES
8> (1, 1001, GETDATE(), 1000.00, ‘COMPLETED’),
9> (2, 1002, GETDATE(), 2000.00, ‘COMPLETED’),
10> (3, 1003, GETDATE(), 3000.00, ‘PENDING’);
11> GO
(3 rows affected)
1> SELECT * FROM fgedu.sales;
2> GO
sale_id product_id customer_id sale_date amount status
———– ———– ———– ———————– ——————— ——————–
1 1 1001 2025-04-08 10:00:00.000 1000.00 COMPLETED
2 2 1002 2025-04-08 10:00:00.000 2000.00 COMPLETED
3 3 1003 2025-04-08 10:00:00.000 3000.00 PENDING
(3 rows affected)
4.2 多容器部署案例
多容器部署实战:
# 步骤1:创建Docker Compose文件
cat > /sqlserver/docker/docker-compose.yml << 'EOF' version: '3.8' services: sqlserver-primary: image: mcr.microsoft.com/mssql/server:2022-latest container_name: sqlserver-primary ports: - "1433:1433" environment: - ACCEPT_EULA=Y - SA_PASSWORD=Password123! - MSSQL_PID=Developer - MSSQL_MEMORY_LIMIT_MB=4096 volumes: - ./data-primary:/var/opt/mssql networks: - sqlserver-network restart: unless-stopped sqlserver-secondary: image: mcr.microsoft.com/mssql/server:2022-latest container_name: sqlserver-secondary ports: - "1434:1433" environment: - ACCEPT_EULA=Y - SA_PASSWORD=Password123! - MSSQL_PID=Developer - MSSQL_MEMORY_LIMIT_MB=4096 volumes: - ./data-secondary:/var/opt/mssql networks: - sqlserver-network restart: unless-stopped networks: sqlserver-network: driver: bridge EOF # 步骤2:创建数据目录 mkdir -p /sqlserver/docker/data-primary /sqlserver/docker/data-secondary chmod 777 /sqlserver/docker/data-primary /sqlserver/docker/data-secondary # 步骤3:启动容器 cd /sqlserver/docker docker-compose up -d # 步骤4:验证容器运行 docker-compose ps # 步骤5:配置主从复制 # 连接主服务器 docker exec -it sqlserver-primary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! # 启用复制 EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'replica threshold (seconds)', 10; RECONFIGURE; GO # 创建复制用户 CREATE LOGIN repl_user WITH PASSWORD = 'ReplPassword123!'; CREATE USER repl_user FOR LOGIN repl_user; GRANT ALTER ANY AVAILABILITY GROUP TO repl_user; GRANT CONNECT SQL TO repl_user; GRANT VIEW SERVER STATE TO repl_user; GO # 退出主服务器 EXIT # 连接从服务器 docker exec -it sqlserver-secondary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! # 创建复制用户 CREATE LOGIN repl_user WITH PASSWORD = 'ReplPassword123!'; CREATE USER repl_user FOR LOGIN repl_user; GRANT ALTER ANY AVAILABILITY GROUP TO repl_user; GRANT CONNECT SQL TO repl_user; GRANT VIEW SERVER STATE TO repl_user; GO # 退出从服务器 EXIT # 步骤6:测试多容器部署 # 在主服务器创建数据库 docker exec -it sqlserver-primary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q "CREATE DATABASE fgedudb;" # 在主服务器创建表 docker exec -it sqlserver-primary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q "USE fgedudb; CREATE TABLE fgedu.sales (sale_id BIGINT PRIMARY KEY IDENTITY(1,1), product_id INT NOT NULL, customer_id INT NOT NULL, sale_date DATETIME NOT NULL, amount DECIMAL(18,2) NOT NULL, status VARCHAR(20) NOT NULL);" # 在主服务器插入数据 docker exec -it sqlserver-primary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q "USE fgedudb; INSERT INTO fgedu.sales (product_id, customer_id, sale_date, amount, status) VALUES (1, 1001, GETDATE(), 1000.00, 'COMPLETED');" # 在从服务器验证数据 docker exec -it sqlserver-secondary /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password123! -Q "USE fgedudb; SELECT * FROM fgedu.sales;"
执行结果:
Creating sqlserver-primary … done
Creating sqlserver-secondary … done
Name Command State Ports
——————————————————————————–
sqlserver-primary /opt/mssql/bin/perm… Up 0.0.0.0:1433->1433/tcp
sqlserver-secondary /opt/mssql/bin/perm… Up 0.0.0.0:1434->1433/tcp
Configuration option ‘show advanced options’ changed from 0 to 1. Run the RECONFIGURE statement to install.
Configuration option ‘replica threshold (seconds)’ changed from 10 to 10. Run the RECONFIGURE statement to install.
(1 rows affected)
(1 rows affected)
Changed database context to ‘fgedudb’.
(1 rows affected)
(1 rows affected)
sale_id product_id customer_id sale_date amount status
———– ———– ———– ———————– ——————— ——————–
1 1 1001 2025-04-08 10:00:00.000 1000.00 COMPLETED
(1 rows affected)
4.3 容器编排案例
容器编排实战:
# 步骤1:初始化Docker Swarm
docker swarm init
# 步骤2:创建服务
docker service create \
–name sqlserver \
–replicas 1 \
–publish 1433:1433 \
–env ACCEPT_EULA=Y \
–env SA_PASSWORD=Password123! \
–env MSSQL_PID=Developer \
–env MSSQL_MEMORY_LIMIT_MB=4096 \
–mount type=volume,source=sqlserver-data,destination=/var/opt/mssql \
mcr.microsoft.com/mssql/server:2022-latest
# 步骤3:查看服务状态
docker service ls
docker service ps sqlserver
# 步骤4:扩展服务
docker service scale sqlserver=2
# 步骤5:查看服务状态
docker service ps sqlserver
# 步骤6:更新服务
docker service update \
–env-add MSSQL_MEMORY_LIMIT_MB=8192 \
sqlserver
# 步骤7:查看服务日志
docker service logs sqlserver
# 步骤8:删除服务
docker service rm sqlserver
# 案例:使用Kubernetes部署SQLServer
# 步骤1:创建Kubernetes配置文件
cat > /sqlserver/docker/sqlserver-deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: sqlserver
labels:
app: sqlserver
spec:
replicas: 1
selector:
matchLabels:
app: sqlserver
template:
metadata:
labels:
app: sqlserver
spec:
containers:
- name: sqlserver
image: mcr.microsoft.com/mssql/server:2022-latest
ports:
- containerPort: 1433
env:
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
value: "Password123!"
- name: MSSQL_PID
value: "Developer"
- name: MSSQL_MEMORY_LIMIT_MB
value: "4096"
volumeMounts:
- name: sqlserver-data
mountPath: /var/opt/mssql
volumes:
- name: sqlserver-data
persistentVolumeClaim:
claimName: sqlserver-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sqlserver-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
---
apiVersion: v1
kind: Service
metadata:
name: sqlserver
spec:
selector:
app: sqlserver
ports:
- port: 1433
targetPort: 1433
type: LoadBalancer
EOF
# 步骤2:部署到Kubernetes
kubectl apply -f /sqlserver/docker/sqlserver-deployment.yaml
# 步骤3:查看部署状态
kubectl get deployments
kubectl get pods
kubectl get services
# 步骤4:连接SQLServer
kubectl port-forward deployment/sqlserver 1433:1433
# 步骤5:删除部署
kubectl delete -f /sqlserver/docker/sqlserver-deployment.yaml
执行结果:
To add a worker to this swarm, run the following command:
docker swarm join –token SWMTKN-1-4abcdefghijklmnopqrstuvwxyz 192.168.1.100:2377
To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.
8a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1b0c9d8e7f6e5d4c3b2a1b0c9d8e7f
ID NAME MODE REPLICAS IMAGE PORTS
8a7b6c5d4e3f sqlserver replicated 1/1 mcr.microsoft.com/mssql/server:2022-latest *:1433->1433/tcp
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
1a2b3c4d5e6f sqlserver.1 mcr.microsoft.com/mssql/server:2022-latest node1 Running Running 5 minutes ago
sqlserver scaled to 2
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
1a2b3c4d5e6f sqlserver.1 mcr.microsoft.com/mssql/server:2022-latest node1 Running Running 6 minutes ago
2b3c4d5e6f7g sqlserver.2 mcr.microsoft.com/mssql/server:2022-latest node2 Running Running 1 minute ago
sqlserver
sqlserver
deployment.apps/sqlserver created
persistentvolumeclaim/sqlserver-pvc created
service/sqlserver created
NAME READY UP-TO-DATE AVAILABLE AGE
sqlserver 1/1 1 1 5m
NAME READY STATUS RESTARTS AGE
sqlserver-6f7d6c5d4c-7x89z 1/1 Running 0 5m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sqlserver LoadBalancer 10.96.0.100
Forwarding from 127.0.0.1:1433 -> 1433
Forwarding from [::1]:1433 -> 1433
deployment.apps “sqlserver” deleted
persistentvolumeclaim “sqlserver-pvc” deleted
service “sqlserver” deleted
Part05-风哥经验总结与分享
5.1 Docker部署最佳实践
Docker部署最佳实践:
- 使用官方镜像:使用Microsoft官方提供的SQLServer Docker镜像
- 合理配置资源:根据SQLServer需求配置内存、CPU等资源
- 使用持久存储:使用Docker卷或绑定挂载存储数据
- 配置环境变量:正确设置ACCEPT_EULA、SA_PASSWORD等环境变量
- 使用网络隔离:使用自定义网络隔离容器
- 定期备份:配置定期备份策略
- 监控容器状态:定期监控容器运行状态和资源使用情况
- 版本管理:使用固定版本标签,避免使用latest标签
更多视频教程www.fgedu.net.cn
5.2 Docker部署常见问题
常见问题:
- 权限问题:容器内数据目录权限不足
- 资源限制:内存或CPU限制导致SQLServer性能下降
- 存储问题:存储不足或性能不佳
- 网络问题:网络配置不当导致连接失败
- 备份问题:备份文件无法访问或备份失败
- 版本兼容性:Docker版本与SQLServer版本不兼容
- 高可用性:单容器部署存在单点故障
学习交流加群风哥微信: itpux-com
5.3 Docker部署性能优化
性能优化:
- 资源配置:根据SQLServer需求配置足够的内存和CPU
- 存储优化:使用SSD存储,配置合理的存储驱动
- 网络优化:使用宿主网络模式,减少网络开销
- 参数调优:根据容器环境调整SQLServer参数
- 镜像优化:使用最小化镜像,减少镜像大小
- 启动优化:配置合理的启动参数,加速容器启动
- 监控优化:建立完善的监控体系,及时发现性能问题
- 编排优化:使用Docker Swarm或Kubernetes实现高可用和负载均衡
学习交流加群风哥QQ113257174
风哥提示:Docker部署SQLServer是一种轻量级、可移植的部署方式,适合开发、测试和小型生产环境。在大型生产环境中,建议结合容器编排工具实现高可用性和负载均衡。
更多学习教程公众号风哥教程itpux_com
from SQLServer视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
