在腾讯云服务器(CVM)上正确配置 Docker 运行环境,需结合腾讯云的网络、安全组、镜像源及最佳实践。以下是详细、安全、生产就绪的配置步骤(以 Ubuntu 22.04/20.04 或 CentOS 7/8 为例,推荐 Ubuntu 22.04 LTS):
✅ 一、前期准备(腾讯云侧配置)
-
选择合适实例规格
- 推荐:2核4GB 起(Docker 容器运行+基础服务);如部署数据库/高并发服务,按需升级。
- 系统盘建议 ≥ 50GB(Docker 镜像、容器层、日志会占用空间)。
-
配置安全组(关键!)
- 放行必要端口(最小化原则):
22/tcp(SSH)80/tcp,443/tcp(Web 服务)- 自定义服务端口(如
3000/tcp,8080/tcp) - ❌ 禁止开放
2375/tcp(Docker Daemon 默认未加密端口)或2376/tcp(TLS 端口)给公网 —— 除非你明确需要远程 API 且已配置 TLS 认证(不推荐新手暴露)。
- 说明:Docker daemon 默认仅监听
unix:///var/run/docker.sock,本地安全;无需也不应开放远程 TCP 端口。
- 放行必要端口(最小化原则):
-
选择镜像源(提速国内拉取)
- 创建实例时可选「腾讯云官方镜像」(已预装常用工具),或使用 Ubuntu/CentOS 官方镜像 + 配置腾讯云 Docker 镜像提速器(见下文)。
✅ 二、登录服务器并安装 Docker(推荐使用官方脚本,非 apt 默认旧版)
▶ Ubuntu/Debian(推荐)
# 1. 更新系统 & 安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 software-properties-common ca-certificates
# 2. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 3. 添加稳定版仓库(注意:根据系统版本替换 `$(lsb_release -cs)`,如 jammy/focal)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 更新包索引并安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 5. 【重要】配置腾讯云镜像提速器(大幅提升 pull 速度)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
# 6. 重启 Docker 并设为开机自启
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
# 7. 验证安装
sudo docker --version
sudo docker run hello-world # 首次运行会下载测试镜像(应成功输出)
▶ CentOS/RHEL(如 CentOS 7/8)
# 启用 EPEL(CentOS 7)
sudo yum install -y epel-release
# 卸载旧版(如有)
sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE(指定最新稳定版)
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 配置腾讯云镜像提速器(同上)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"log-driver": "json-file",
"log-opts": {"max-size": "100m", "max-file": "3"}
}
EOF
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
# 验证
sudo docker run hello-world
💡 为什么用
mirror.ccs.tencentyun.com?
这是腾讯云官方 Docker 镜像提速器,位于腾讯云内网,免流量费、低延迟、高可用,比第三方镜像源更稳定可靠(官方文档)。
✅ 三、权限与安全加固(生产必备)
1. 允许普通用户免 sudo 使用 Docker(避免 root 权限滥用)
# 创建 docker 组(如不存在)
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 生效(需重新登录或执行)
newgrp docker # 或退出终端重连
✅ 验证:docker ps 不报 permission denied 即成功。
2. (可选)限制容器资源,防失控
# 示例:运行容器时限制内存和 CPU(生产环境强烈建议)
docker run -d
--name nginx-limited
--memory=512m
--cpus=1.0
-p 8080:80
nginx:alpine
3. (重要)禁用不安全配置
- ✅ 确保
/etc/docker/daemon.json中 没有"host": "tcp://0.0.0.0:2375"(禁用未加密远程 API) - ✅ 若需远程管理,请使用 SSH 隧道或配置 TLS(参考 Docker 官方 TLS 文档)
✅ 四、进阶建议(生产环境)
| 项目 | 推荐做法 |
|---|---|
| 容器编排 | 单机用 docker-compose(已随 docker-compose-plugin 安装);多机集群用 Tencent Kubernetes Engine(TKE)——腾讯云托管 K8s,比自建 Swarm 更稳 |
| 数据持久化 | 永远使用 -v /data/nginx:/usr/share/nginx/html 或命名卷 docker volume create myvol,禁止直接写容器内文件系统 |
| 日志管理 | 配置 log-opts(如上)+ 结合腾讯云 CLS(日志服务)采集 /var/lib/docker/containers/*/*.log |
| 镜像安全 | 使用 docker scan <image>(需 docker scan 插件)或集成腾讯云「容器镜像服务 TCR」进行漏洞扫描与私有镜像托管 |
| 备份策略 | 定期备份:/var/lib/docker/volumes/(卷数据)、/etc/docker/daemon.json、docker-compose.yml 文件 |
✅ 五、常见问题排查
| 现象 | 解决方案 |
|---|---|
Cannot connect to the Docker daemon |
检查 sudo systemctl status docker → 是否 running?是否用户在 docker 组? |
pull access denied |
检查是否登录私有仓库 docker login tcr.tencentcloudcr.com(如用 TCR) |
no space left on device |
清理:docker system prune -a(慎用)+ docker volume prune + 检查磁盘 df -h |
Connection refused when pulling |
检查 /etc/docker/daemon.json 镜像源格式是否 JSON 合法(用 jq . /etc/docker/daemon.json 验证) |
📌 总结:最佳实践清单
- ✅ 使用腾讯云官方镜像提速器
mirror.ccs.tencentyun.com - ✅ 禁止开放 Docker daemon 的 TCP 端口(默认 unix socket 最安全)
- ✅ 将用户加入
docker组,避免长期使用sudo docker - ✅ 配置日志轮转与资源限制
- ✅ 敏感服务(如数据库)用
--network=host或自定义 bridge 网络隔离 - ✅ 定期更新 Docker:
sudo apt update && sudo apt install docker-ce(Ubuntu)
如需一键脚本自动化部署,我可为你生成适配 Ubuntu/CentOS 的 .sh 安装脚本(含错误处理与腾讯云镜像检测)。欢迎继续提问 👇
也欢迎告知你的具体场景(如:部署 Spring Boot?WordPress?Nginx 反向X_X?),我可以提供针对性配置示例。
云小栈