1. Docker离线安装与中间件部署实战指南
在x86架构服务器环境中,Docker离线安装及中间件部署是企业级应用部署的常见需求。特别是在内网环境、安全隔离区域或网络受限场景下,掌握完整的离线部署方案能显著提升运维效率。本文将详细介绍从Docker引擎离线安装到常见中间件容器化部署的全流程,包含MySQL主从复制、Redis高可用配置等企业级实践。
1.1 离线环境准备要点
离线部署的核心在于预先下载所有依赖组件并建立完整的文件传输机制。建议准备一台可联网的同架构跳板机(x86_64)用于资源下载,通过以下目录结构组织部署文件:
code复制/opt/offline-deploy/
├── docker/ # Docker引擎安装包
│ ├── docker-23.0.6.tgz # 官方二进制包
│ └── install.sh # 安装脚本
├── images/ # 容器镜像存档
│ ├── mysql-8.2.0.tar
│ ├── redis-6.2.5.tar
│ └── nginxwebui-3.7.3.tar
└── configs/ # 中间件配置文件模板
├── my.cnf
└── redis.conf
关键提示:所有组件版本需严格匹配目标系统架构(x86_64),可通过
uname -m命令验证。若需支持ARM架构,需另行准备对应版本。
2. Docker引擎离线安装详解
2.1 二进制包安装流程
-
获取官方稳定版本:
bash复制# 在联网机器执行 wget https://download.docker.com/linux/static/stable/x86_64/docker-23.0.6.tgz -
离线安装步骤:
bash复制# 解压安装包 tar xzvf docker-23.0.6.tgz # 拷贝二进制文件 sudo cp docker/* /usr/bin/ # 创建systemd服务文件 sudo tee /etc/systemd/system/docker.service <<EOF [Unit] Description=Docker Application Container Engine After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOF # 启动服务 sudo systemctl enable docker sudo systemctl start docker
2.2 离线安装验证
执行以下命令验证安装:
bash复制sudo docker info | grep -E 'Server Version|OSType'
正常输出应显示:
code复制 Server Version: 23.0.6
OSType: linux
常见问题排查:
- 若出现
cgroup相关错误,需检查内核配置:bash复制grep cgroup /proc/filesystems- 权限问题可通过将用户加入docker组解决:
bash复制sudo usermod -aG docker $USER
3. MySQL 8.0主从集群部署
3.1 单实例容器化部署
-
准备配置文件:
bash复制mkdir -p /home/mysql8/{conf,data,logs} cat > /home/mysql8/conf/my.cnf <<EOF [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql symbolic-links=0 max_connections=2000 max_user_connections=1900 max_allowed_packet=50M lower_case_table_names=1 skip-name-resolve EOF -
启动容器:
bash复制
docker run -d \ --name mysql8 \ -p 3306:3306 \ --restart=always \ -v /home/mysql8/conf:/etc/mysql \ -v /home/mysql8/data:/var/lib/mysql \ -v /home/mysql8/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=admin123 \ mysql:8.2.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci
3.2 主从复制配置
主库配置追加:
ini复制[mysqld]
log-bin=mysql-bin
binlog_expire_logs_seconds=604800
server-id=1
binlog-format=ROW
sync_binlog=1
从库配置差异:
ini复制[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only=1
主从建立流程:
sql复制-- 在主库创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- 在从库配置主从关系
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
START SLAVE;
关键检查点:
- 主从网络连通性(防火墙3306端口)
show slave status\G中Slave_IO_Running和Slave_SQL_Running必须为Yes- 主从
server-id不可重复
4. Redis高可用部署方案
4.1 单节点容器化部署
-
准备持久化配置:
bash复制mkdir -p /home/redis/{data,conf} cat > /home/redis/conf/redis.conf <<EOF bind 0.0.0.0 port 6379 timeout 0 tcp-keepalive 300 daemonize no supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data requirepass yourpassword appendonly yes appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes EOF -
启动容器:
bash复制
docker run -d \ --name redis \ -p 6379:6379 \ --restart always \ -v /home/redis/conf:/usr/local/etc/redis \ -v /home/redis/data:/data \ redis:6.2.5 \ redis-server /usr/local/etc/redis/redis.conf
4.2 哨兵模式配置
哨兵配置文件:
ini复制sentinel monitor mymaster 主库IP 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
启动哨兵容器:
bash复制docker run -d \
--name redis-sentinel \
-p 26379:26379 \
-v /path/to/sentinel.conf:/sentinel.conf \
redis:6.2.5 \
redis-sentinel /sentinel.conf
5. NginxWebUI可视化管理
5.1 离线部署步骤
-
镜像导出导入:
bash复制# 在联网机器执行 docker pull cym1102/nginxwebui:3.7.3 docker save -o nginxwebui-3.7.3.tar cym1102/nginxwebui:3.7.3 # 在离线机器执行 docker load -i nginxwebui-3.7.3.tar -
启动容器:
bash复制docker run -d \ --name=nginxWebUI \ --restart=always \ -v /home/nginxWebUI:/home/nginxWebUI \ -e BOOT_OPTIONS="--server.port=8080" \ --net=host \ cym1102/nginxwebui:3.7.3
5.2 防火墙配置
bash复制# 开放管理端口
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
6. 离线部署经验总结
-
版本兼容性矩阵:
中间件 推荐版本 最低内核要求 依赖库 Docker 23.0.x 3.10+ libseccomp, iptables MySQL 8.0.23+ 4.14+ libaio, numactl Redis 6.2.5+ 3.2+ jemalloc, openssl -
磁盘空间预估:
- 基础Docker环境:300MB
- MySQL镜像:500MB(+数据卷空间)
- Redis镜像:100MB(+AOF日志空间)
- 建议预留至少5GB磁盘空间
-
性能调优参数:
ini复制# MySQL性能关键参数 innodb_buffer_pool_size = 1G innodb_log_file_size = 256M innodb_flush_method = O_DIRECT # Redis内存管理 maxmemory 2gb maxmemory-policy allkeys-lru -
巡检 checklist:
- [ ] 每日检查容器状态:
docker ps --no-trunc - [ ] 每周验证MySQL主从同步延迟
- [ ] 每月Redis内存碎片率检查:
redis-cli info memory - [ ] 季度性磁盘空间审计
- [ ] 每日检查容器状态:
通过上述完整方案,可在完全离线的x86环境中快速搭建生产级容器化中间件平台。实际部署时建议先在小规模测试环境验证所有步骤,再推广到生产环境。对于高可用要求严格的场景,应考虑结合Kubernetes进行容器编排管理。
