在日常开发中,我们经常需要本地运行一些中间件或工具,比如绘图工具 Excalidraw、缓存 Redis、关系型数据库 MySQL。使用 Docker 可以避免污染宿主机环境,实现快速启动和迁移。
本文分享三个实用的 PowerShell 一键启动脚本,以及对应的配置文件,让你在 Windows 上也能轻松管理容器化开发环境。
一、Excalidraw ------ 本地化部署的白板神器
Excalidraw 是一款开源的虚拟白板工具,支持手绘风格图形。通过 Docker 运行官方镜像,可以享受私有的绘图服务。
启动脚本 start-excalidraw.ps1
powershell
# start-excalidraw.ps1
# Excalidraw Docker 容器启动脚本
$ContainerName = "excalidraw"
$ImageName = "excalidraw/excalidraw:latest"
$HostPort = 5000
$ContainerPort = 80
$LocalPath = "D:\develop\Docker Repository\excalidraw"
$ContainerPath = "/app/data"
# 确保本地挂载目录存在
if (-not (Test-Path $LocalPath)) {
New-Item -ItemType Directory -Path $LocalPath -Force | Out-Null
Write-Host "已创建目录: $LocalPath"
}
# 检查是否已在运行
$RunningContainer = docker ps -q -f "name=$ContainerName" 2>$null
if ($RunningContainer) {
Write-Host "容器 '$ContainerName' 已在运行中。"
exit 0
}
# 检查是否存在已停止的容器
$ExistingContainer = docker ps -aq -f "name=$ContainerName" -f "status=exited" 2>$null
if ($ExistingContainer) {
Write-Host "启动已存在的容器 '$ContainerName' ..."
docker start $ContainerName
} else {
Write-Host "创建并启动新容器 '$ContainerName' ..."
docker run -d `
--name $ContainerName `
-p "${HostPort}:${ContainerPort}" `
-v "${LocalPath}:${ContainerPath}" `
--restart unless-stopped `
$ImageName
}
if ($LASTEXITCODE -eq 0) {
Write-Host "Excalidraw 已启动,访问地址: http://localhost:$HostPort"
} else {
Write-Host "启动失败,请检查 Docker 是否运行。"
}

📌 使用说明
- 容器内数据会持久化到
D:\develop\Docker Repository\excalidraw- 访问
http://localhost:5000即可使用
二、Redis ------ 高性能键值缓存
配置文件 redis.conf
conf
# 基础配置
bind 0.0.0.0
port 6379
requirepass 12345678
# 持久化配置
dir /data
dbfilename dump.rdb
appendonly yes
appenddirname "appendonlydir"
# 日志配置
logfile /var/log/redis/redis-server.log
loglevel notice
# 内存与策略
maxmemory 256mb
maxmemory-policy allkeys-lru
启动脚本 start-redis.ps1
powershell
# start-redis.ps1
$container = docker ps -aq -f name=redis-local
if ($container) {
docker start redis-local
} else {
docker run -d `
--name redis-local `
--restart unless-stopped `
-p 6379:6379 `
-v "D:\develop\Docker Repository\redis\conf\redis.conf:/usr/local/etc/redis/redis.conf" `
-v "D:\develop\Docker Repository\redis\data:/data" `
-v "D:\develop\Docker Repository\redis\log:/var/log/redis" `
redis:latest `
redis-server /usr/local/etc/redis/redis.conf
}

📌 提醒 :记得修改
redis.conf中的requirepass为自己的密码。
三、MySQL ------ 两种部署方案
MySQL 容器需要挂载配置文件、数据目录和日志目录。下面提供两种常用方式。


方案一:使用自定义端口(3307)与环境变量
启动脚本 run-mysql-3307.ps1
powershell
# ========== 变量区(按需修改)==========
$MYSQL_PORT = "3307" # 主机映射端口
$MYSQL_VERSION = "8.4.4" # MySQL 版本
$CONTAINER_NAME = "mysql-local" # 容器名称
$ROOT_PASSWORD = "12345678" # root 密码
$DEFAULT_DB = "myapp" # 默认数据库
$BASE_PATH = "D:\develop\Docker Repository\mysql" # 挂载根目录
# ========== 一键部署 ==========
docker run -d `
--name $CONTAINER_NAME `
--restart unless-stopped `
-p "${MYSQL_PORT}:3306" ` # 注意:容器内 MySQL 默认端口是 3306
-e MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD `
-e MYSQL_DATABASE=$DEFAULT_DB `
-v "${BASE_PATH}\conf\my.cnf:/etc/mysql/my.cnf" `
-v "${BASE_PATH}\data:/var/lib/mysql" `
-v "${BASE_PATH}\log:/var/log/mysql" `
mysql:${MYSQL_VERSION}
配套 my.cnf(放在 conf 目录下)
ini
[mysqld]
port=3306 # 容器内部端口固定为 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone='+08:00'
max_connections=200
innodb_buffer_pool_size=256M
# 日志配置
log-error=/var/log/mysql/error.log
general_log=1
general_log_file=/var/log/mysql/general.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
[client]
default-character-set=utf8mb4

⚠️ 注意 :
-p参数应写为"${MYSQL_PORT}:3306",不要把容器内的 3306 映射成 3307。这里主机端口为 3307,连接时使用
-P 3307。
方案二:标准 3306 端口 + 更丰富的配置
启动脚本 run-mysql.ps1
powershell
# run-mysql.ps1
$basePath = "D:/develop/Docker Repository/mysql"
# 确保目录存在
@("conf", "data", "logs") | ForEach-Object {
$dir = Join-Path $basePath $_
if (!(Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir -Force | Out-Null
Write-Host "已创建: $dir"
}
}
# 运行容器(使用标准 3306 端口)
docker run -d `
--name mysql `
--restart unless-stopped `
-p 3306:3306 `
-v "$basePath/conf/my.cnf:/etc/mysql/my.cnf" `
-v "$basePath/data:/var/lib/mysql" `
-v "$basePath/logs:/var/log/mysql" `
-e MYSQL_ROOT_PASSWORD=12345678 `
-e TZ=Asia/Shanghai `
mysql:8.4.4
更完整的 my.cnf(适合生产级调优)
ini
[client]
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
[mysqld]
# 基础设置
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/MySQL
skip-external-locking
# 字符集(统一 utf8mb4)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character-set-client-handshake = FALSE
init_connect = 'SET NAMES utf8mb4'
# 时区
default-time-zone = '+08:00'
# 日志(适配挂载路径)
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
general_log = 0
general_log_file = /var/log/mysql/mysql-query.log
log-bin = /var/log/mysql/mysql-bin.log
server-id = 1
# InnoDB 调优
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
# 连接设置
max_connections = 200
wait_timeout = 28800
interactive_timeout = 28800
max_allowed_packet = 64M
[mysqldump]
quick
quote-names
max_allowed_packet = 64M
default-character-set = utf8mb4

📌 两种方案的区别
- 方案一:主机端口 3307,适合本地已有 MySQL 服务(占用 3306)的情况。
- 方案二:主机端口 3306,配置更完整(binlog、时区、InnoDB 调优等),适合作为主力开发数据库。
总结
通过上述脚本,你可以在 Windows 上快速拉起三个常用的开发工具/中间件,无需手动安装,也不用担心环境冲突。每个脚本都具备「检查容器是否存在 → 启动或创建」的逻辑,支持 --restart unless-stopped 保证开机自启。
使用建议
- 将脚本保存为
.ps1文件,在 PowerShell 中执行。 - 首次运行前根据实际情况修改路径、密码和端口。
- 若需停止容器,使用
docker stop <容器名>;彻底删除用docker rm <容器名>。
希望这些配置能帮助你更高效地搭建本地开发环境!如有问题,欢迎留言交流。