VPS安装Docker教程2026:容器化部署完整指南

前言

Docker作为容器化技术的代表,已经成为现代VPS部署的标准工具。它通过将应用及其依赖打包到标准化的容器中,实现了"一次构建,到处运行"的理想状态。

对于个人站长和开发者而言,Docker带来的好处是显而易见的:
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:秒级启动应用,告别繁琐的配置过程
- 资源隔离:容器间互不干扰,提高服务器安全性
- 易于迁移:换VPS只需迁移镜像,无需重新配置环境

2026年,随着云原生技术的成熟,掌握Docker已经成为VPS运维的基本技能。本文将详细介绍在VPS上安装和配置Docker的完整流程,并结合实际案例帮助您快速上手。

一、Docker基础概念与架构

1.1 Docker核心概念

在动手安装之前,理解Docker的核心概念非常重要:

概念 说明 类比
镜像(Image) 只读的应用模板 类似于ISO光盘镜像
容器(Container) 镜像的运行实例 类似于正在运行的虚拟机
仓库(Registry) 镜像的存储和分发中心 类似于Git仓库
Dockerfile 构建镜像的脚本 类似于Makefile

1.2 Docker架构组件

Docker采用客户端-服务器(C/S)架构:
- Docker Client:用户与Docker交互的命令行工具
- Docker Daemon:后台守护进程,负责处理客户端请求
- Docker Hub:官方公共镜像仓库
- Docker Registry:私有镜像仓库

1.3 为什么选择Docker

传统部署 vs Docker部署对比:

维度 传统部署 Docker部署
环境配置 需手动安装依赖 镜像自带所有依赖
隔离性 进程级隔离弱 容器级强隔离
启动速度 分钟级 秒级
资源占用 较高 较低
迁移难度 困难 简单

二、VPS环境准备与系统要求

2.1 系统要求检查

在安装Docker之前,请确保您的VPS满足以下要求:

操作系统支持:
- Ubuntu 20.04/22.04/24.04 LTS(64位)
- CentOS 7/8/Stream 8/9(64位)
- Debian 10/11/12(64位)
- Fedora 38/39(64位)

硬件要求:
- CPU:支持64位,建议2核以上
- 内存:至少1GB(推荐2GB以上)
- 磁盘:至少10GB可用空间

检查命令:

# 检查系统版本
cat /etc/os-release

# 检查内核版本(需3.10以上)
uname -r

# 检查CPU架构
uname -m

# 检查内存
free -h

# 检查磁盘空间
df -h

2.2 卸载旧版本

如果VPS上安装了旧版本的Docker,请先卸载:

# Ubuntu/Debian
sudo apt-get remove docker docker-engine docker.io containerd runc

# CentOS/RHEL
sudo yum remove docker docker-client docker-client-latest docker-common \
                 docker-latest docker-latest-logrotate docker-logrotate \
                 docker-engine podman runc

2.3 网络与防火墙准备

Docker需要以下端口(根据实际应用开放):
- 2375/2376:Docker守护进程API(不建议公网开放)
- 应用端口:如80(HTTP)、443(HTTPS)、3306(MySQL)等

防火墙配置示例(UFW):

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

三、Docker安装详细步骤

3.1 Ubuntu/Debian系统安装

方法1:使用官方便捷脚本(推荐新手)

# 下载并执行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker --version
sudo docker run hello-world

方法2:使用APT仓库安装(推荐生产环境)

# 更新软件包索引
sudo apt-get update

# 安装依赖包
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置Docker仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
sudo docker --version
sudo docker compose version

3.2 CentOS/RHEL系统安装

# 安装yum-utils工具
sudo yum install -y yum-utils

# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker --version
sudo docker run hello-world

3.3 配置非root用户使用Docker

默认情况下,只有root用户和docker用户组的用户才能使用Docker。建议将普通用户加入docker组:

# 创建docker用户组(通常已存在)
sudo groupadd docker

# 将当前用户加入docker组
sudo usermod -aG docker $USER

# 激活用户组变更(重新登录或执行以下命令)
newgrp docker

# 验证(无需sudo)
docker ps

注意事项:
- 加入docker组相当于授予root等效权限(因为可以通过Docker挂载宿主机目录)
- 生产环境建议配置sudo权限而非直接加入docker组

四、Docker镜像加速与优化配置

4.1 配置国内镜像加速器

由于网络原因,从Docker Hub拉取镜像可能很慢。配置国内镜像加速器可以显著提升速度:

编辑Docker守护进程配置文件:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://registry.docker-cn.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

# 重新加载配置并重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证镜像加速是否生效
docker info | grep -A 10 "Registry Mirrors"

4.2 配置Docker日志轮转

防止Docker日志占用过多磁盘空间:

# 编辑/etc/docker/daemon.json,添加日志配置(如上所示)
# 或者为单个容器配置日志

docker run \
  --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx:latest

4.3 调整Docker存储位置

默认情况下,Docker数据存储在/var/lib/docker。如果根分区空间不足,可以迁移到大容量分区:

# 停止Docker服务
sudo systemctl stop docker

# 创建新的存储目录
sudo mkdir -p /data/docker

# 迁移数据(需要时间,取决于数据量)
sudo rsync -avz /var/lib/docker/ /data/docker/

# 编辑Docker配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "data-root": "/data/docker"
}
EOF

# 启动Docker服务
sudo systemctl start docker

# 验证存储位置
docker info | grep "Docker Root Dir"

# 确认无误后删除旧数据
sudo rm -rf /var/lib/docker

五、Docker Compose多容器编排

5.1 Docker Compose简介

Docker Compose是用于定义和运行多容器Docker应用的工具。通过一个YAML文件配置应用的所有服务,然后使用一个命令即可创建并启动所有服务。

核心优势:
- 简化多容器应用的管理
- 支持服务依赖关系定义
- 便于开发、测试、生产环境的一致性
- 支持一键部署和销毁

5.2 安装Docker Compose

Docker Compose V2已经作为Docker CLI插件集成,如果安装了docker-compose-plugin,可以直接使用:

# 验证是否已安装
docker compose version

# 如果未安装,手动安装(Linux)
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

5.3 docker-compose.yml文件详解

示例:LNMP环境配置

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/logs:/var/log/nginx
      - ./wwwroot:/var/www/html
    depends_on:
      - php
    networks:
      - lnmp-network

  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./wwwroot:/var/www/html
    networks:
      - lnmp-network

  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: your_database
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "3306:3306"
    networks:
      - lnmp-network

networks:
  lnmp-network:
    driver: bridge

volumes:
  mysql_data:

5.4 常用Docker Compose命令

# 启动所有服务(后台运行)
docker compose up -d

# 查看运行中的服务
docker compose ps

# 查看服务日志
docker compose logs -f

# 停止并删除所有服务
docker compose down

# 停止并删除所有服务,同时删除数据卷
docker compose down -v

# 重新构建并启动服务
docker compose up -d --build

# 执行命令到运行中的容器
docker compose exec php bash

# 查看服务资源使用情况
docker compose top

六、Docker安全加固与最佳实践

6.1 安全配置建议

1. 启用Docker Content Trust(DCT)

# 启用镜像签名验证
export DOCKER_CONTENT_TRUST=1

# 拉取镜像时会验证签名
docker pull nginx:latest

2. 限制容器资源使用

# 限制容器使用的资源
docker run \
  --memory="512m" \
  --memory-swap="1g" \
  --cpus="1.5" \
  --pids-limit=100 \
  nginx:latest

3. 以非root用户运行容器

FROM nginx:alpine

# 创建非root用户
RUN addgroup -g 1000 appgroup && \
    adduser -D -u 1000 -G appgroup appuser

# 切换 to 非root用户
USER appuser

CMD ["nginx", "-g", "daemon off;"]

6.2 定期清理Docker资源

# 查看Docker磁盘使用情况
docker system df

# 清理未使用的镜像、容器、网络、数据卷
docker system prune -a

# 仅清理未使用的镜像
docker image prune -a

# 清理未使用的数据卷(谨慎操作)
docker volume prune

6.3 备份与恢复Docker数据

备份MySQL数据卷示例:

# 创建备份容器,挂载数据卷并打包
docker run --rm \
  -v mysql_data:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/mysql_backup_$(date +%Y%m%d).tar.gz /data

# 恢复数据卷
docker run --rm \
  -v mysql_data:/data \
  -v $(pwd):/backup \
  alpine tar xzf /backup/mysql_backup_20260101.tar.gz -C /

总结

通过本文的详细讲解,您已经掌握了在VPS上安装和配置Docker的完整流程。Docker不仅能简化应用部署,还能提高服务器资源利用率和安全性。

核心要点回顾:
1. 选择适合的安装方式(新手用脚本,生产用仓库)
2. 配置镜像加速器提升拉取速度
3. 使用Docker Compose管理多容器应用
4. 遵循安全最佳实践,定期清理资源
5. 做好数据备份,防止意外丢失

随着容器化技术的深入,您可能还需要学习Kubernetes等容器编排工具,但Docker始终是容器化之旅的第一步。

相关文章推荐

Docker是现代化VPS运维的基础,以下文章将帮助您进一步提升技能:
- VPS定时任务设置教程2026:crontab配置与自动化任务 - 配合Docker实现自动化容器管理
- VPS配置防火墙规则教程2026:iptables与firewalld详解 - 保护Docker容器网络安全
- VPS搭建网站教程2026:LNMP环境搭建与配置 - 使用Docker快速搭建LNMP环境
- VPS安装数据库教程2026:MySQL/PostgreSQL部署指南 - 在Docker中部署数据库服务
- VPS安全加固教程2026:SSH安全与防暴力破解 - 加强Docker宿主机的安全防护

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。