在 VPS Ubuntu 上安装 Docker

📋 目录

Docker 是什么?为什么在 VPS 上使用?

Docker 是一种容器化平台,将应用程序及其所有依赖项打包到轻量级、可移植的容器中。每个容器在隔离环境中运行,彻底解决了"在我机器上能运行"的问题。

Docker 容器与虚拟机对比:

特性Docker 容器虚拟机
体积轻量(MB)较重(GB)
启动时间秒级分钟级
资源共享共享内核独立内核
隔离级别进程级别硬件级别
资源开销极低较高
可移植性非常高中等

Docker 非常适合 VPS,因为它资源占用少,让您在单台 VPS 上高效运行多个应用程序。

系统要求

💡 提示:AsiaGB 2GB 内存以上的 VPS 套餐完全支持 Docker,可同时运行多个容器,配合高速 SSD 存储,性能出色。

在 Ubuntu 22.04/24.04 上安装 Docker

第一步:更新软件包列表

sudo apt update && sudo apt upgrade -y

第二步:安装依赖项

sudo apt install -y ca-certificates curl gnupg lsb-release

第三步:添加 Docker GPG 密钥

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /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   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

第五步:安装 Docker Engine

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

第六步:验证安装

sudo docker run hello-world

第七步:免 sudo 使用 Docker

sudo usermod -aG docker $USER
newgrp docker

Docker 基本命令

镜像管理

docker pull nginx          # 拉取镜像
docker images              # 查看所有镜像
docker rmi nginx           # 删除镜像

容器管理

docker run -d -p 80:80 --name my-nginx nginx
docker ps                  # 运行中的容器
docker ps -a               # 所有容器
docker stop my-nginx
docker start my-nginx
docker rm my-nginx

日志与 Shell 访问

docker logs my-nginx
docker logs -f my-nginx    # 实时日志
docker exec -it my-nginx bash

Docker Compose

Docker Compose 通过单个 YAML 文件管理多容器应用。现代 Docker CE 已内置 Compose 插件:

docker compose version

WordPress 的 docker-compose.yml 示例:

version: '3.8'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    depends_on:
      - db
    volumes:
      - wp_data:/var/www/html
volumes:
  db_data:
  wp_data:
docker compose up -d

运行第一个容器

docker run -d   --name my-web   -p 8080:80   --restart unless-stopped   -v /var/www/html:/usr/share/nginx/html:ro   nginx

curl http://localhost:8080
🔥 提示:生产环境容器建议加上 --restart unless-stopped,这样 VPS 重启后容器会自动恢复运行。

端口、数据卷和网络

端口映射

docker run -d -p 3000:3000 my-app
docker run -d -p 127.0.0.1:5432:5432 postgres

数据卷

docker volume create my-data
docker run -d -v my-data:/data my-app
docker volume ls
docker volume prune

网络

docker network create my-network
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app

Docker 安全配置

⚠️ UFW + Docker 注意:Docker 直接修改 iptables,绕过 UFW 规则。建议将容器绑定到 localhost,使用 Nginx 反向代理处理外部访问。

常见问题排查

Docker 守护进程未启动

sudo systemctl status docker
sudo systemctl start docker
sudo systemctl enable docker

权限被拒绝

sudo usermod -aG docker $USER
# 重新登录后生效

端口已被占用

sudo lsof -i :80
docker stop CONTAINER_NAME

磁盘空间不足

docker system prune -a
docker volume prune

总结

Docker 极大地简化了 VPS 上的应用部署。核心步骤:安装 Docker Engine → 将用户添加到 docker 组 → 使用 docker run 运行容器 → 使用 Docker Compose 管理多容器应用 → 实施安全加固。AsiaGB VPS 提供高速 SSD 存储和 99% 正常运行时间 SLA,为 Docker 工作负载提供可靠保障。

常见问题

Q:Docker 和 Docker Desktop 有什么区别?
Docker Desktop 是 macOS 和 Windows 的图形界面应用,内置 Docker Engine。Linux 服务器上的 Docker Engine(Docker CE)没有 GUI,专为 VPS 和服务器环境设计,通过命令行使用。
Q:1GB 内存的 VPS 能运行 Docker 吗?
可以,但有限制。可以运行 2-3 个轻量容器。运行 WordPress 或数据库建议使用 2GB 以上内存以获得良好性能。
Q:容器和虚拟机有什么区别?
容器与宿主机共享 OS 内核,体积小、启动快。虚拟机有独立完整的操作系统,隔离性更强但资源消耗更多。Docker 容器在可移植性和效率方面表现出色。
Q:删除容器后,容器内的数据会丢失吗?
是的,容器层数据删除后会丢失。使用 Docker 数据卷或绑定挂载来持久化数据:-v /host/path:/container/path 或命名卷。
Q:Docker Compose 是什么?需要单独安装吗?
Docker Compose 通过 YAML 文件管理多容器应用。现代 Docker CE 已内置 Compose 插件,直接使用 docker compose 命令即可,无需单独安装。
Q:如何将 Docker 与 Nginx 反向代理配合使用?
将容器绑定到 localhost(-p 127.0.0.1:PORT:PORT),然后配置 Nginx 将 80/443 端口的请求代理到该 localhost 端口。这样可以正确控制防火墙,并通过 Let's Encrypt 启用 SSL/TLS。