本站包含联盟营销链接 — 如果您通过链接注册,我们将获得佣金。 了解更多

Docker 在 VPS 上:完整安装和使用指南

Docker 在 VPS 上:完整安装和使用指南

Docker 是什么以及为什么在 VPS 上使用 Docker

Docker 是一种容器化技术,允许您将应用程序及其所有依赖项、库和配置打包到一个称为容器的标准化单元中。与应用程序直接在操作系统上运行的传统部署不同,Docker 容器提供隔离的环境,每个应用程序独立运行,不会相互干扰。

在 VPS 上使用 Docker 为现代开发和部署工作流程带来了重大优势:

Docker 与虚拟机有根本区别。虽然虚拟机需要为每个实例运行完整的操作系统,消耗数 GB 的存储和大量的 CPU 资源,但 Docker 容器共享主机 OS 内核。这使得 Docker 在单个 VPS 上运行多个应用程序时效率和成本效益都大大提高。

Docker 的 VPS 要求和系统规格

成功运行 Docker 需要 VPS 具有足够的系统资源和正确的配置。具体要求取决于您计划运行多少容器以及它们的资源需求,但这是基本建议:

如果您计划仅运行一个或两个轻量级容器,具有 2 GB RAM 和 2 个 CPU 核心的 VPS 可能就足够了。但是,对于生产使用或多个服务,投资于具有 4+ GB RAM、4+ CPU 核心和 100+ GB SSD 存储的 VPS 可以提供更好的稳定性和增长空间。

在 Ubuntu 上逐步安装 Docker Engine

使用官方 Docker 存储库在 Ubuntu 上安装 Docker 非常简单。按照以下步骤在您的 VPS 上启动并运行 Docker:

第 1 步:更新系统包

首先更新您的系统以确保所有包都是最新的:

sudo apt-get update
sudo apt-get upgrade -y

第 2 步:安装前置条件

安装 Docker 需要的必需包:

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

第 3 步:添加 Docker GPG 密钥和存储库

添加 Docker 官方 GPG 密钥和存储库:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 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

更新包索引并安装 Docker:

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

第 5 步:验证安装并运行第一个容器

通过运行 hello-world 镜像来测试 Docker 安装:

sudo docker run hello-world

要在不使用 sudo 的情况下管理 Docker,请将您的用户添加到 docker 组(可选但推荐):

sudo usermod -aG docker $USER
newgrp docker

通过检查其状态来验证 Docker 是否正在运行:

sudo systemctl status docker

启用 Docker 以在系统启动时自动启动:

sudo systemctl enable docker

Docker Compose:管理多容器应用程序

Docker Compose 是一个工具,可以简化运行多个相互连接的 Docker 容器作为单个应用程序的过程。Docker Compose 不是单独管理每个容器,而是使用 YAML 配置文件 (docker-compose.yml) 在一个地方定义所有服务、网络和卷。

安装 Docker Compose

使用 pip 安装 Docker Compose 或直接下载二进制文件:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

创建 docker-compose.yml 文件

包含数据库的 Web 应用程序的典型 docker-compose.yml 可能如下所示:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

启动和管理服务

启动在编写文件中定义的所有服务:

docker-compose up -d

查看正在运行的服务:

docker-compose ps

查看特定服务的日志:

docker-compose logs web

停止所有服务:

docker-compose down

Docker Compose 自动创建连接所有服务的网络,因此容器可以通过服务名称相互通信。这消除了手动管理网络的需要,使多容器设置更容易维护。

管理 Docker 容器、镜像和持久数据卷

有效的容器管理包括了解如何使用镜像、容器和数据卷。这些是在生产环境中运行 Docker 的基本概念。

Docker 镜像和容器

Docker 镜像是包含运行应用程序所需的一切的只读蓝图。容器是镜像的运行实例。您可以将镜像视为类,将容器视为编程中的对象。

docker images - 列出系统上的所有镜像
docker ps -a - 列出所有容器(运行和已停止)
docker run -d --name mycontainer nginx:latest - 创建并启动容器

使用卷进行数据持久化

容器默认是短暂的;停止时,其中的所有数据都会丢失。卷提供持久存储,在容器重启后仍然存在,并且可以在容器之间共享:

docker volume create mydata - 创建命名卷
docker run -v mydata:/app/data nginx:latest - 将卷挂载到容器
docker volume ls - 列出所有卷

容器生命周期管理

清理未使用的资源

Docker 会随着时间的推移积累未使用的镜像和容器。清理方法:

docker system prune -a - 删除所有未使用的容器、镜像和卷
docker image prune - 删除悬空镜像
docker volume prune - 删除未使用的卷

将 Nginx 用作 Docker 容器的反向代理

在 Docker 容器前运行 Nginx 作为反向代理,可以提供负载均衡、SSL/TLS 终止和将流量路由到正确容器等优势。这是生产部署中的常见模式。

设置 Nginx 反向代理

为反向代理到 Docker 容器创建 Nginx 配置文件:

upstream backend {
  server web1:3000;
  server web2:3000;
}

server {
  listen 80;
  server_name example.com;
  
  location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Docker 网络

容器通过 Docker 网络通信。使用 Docker Compose 时,服务会自动添加到网络中,可以通过服务名称相互到达。对于手动 Docker 网络:

docker network create mynetwork - 创建自定义网络
docker run --network mynetwork --name web nginx:latest - 将容器连接到网络

具有 Nginx 的 Docker Compose 设置

在 docker-compose.yml 中,将 Nginx 服务与同一网络上的其他容器一起定义:

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web1
      - web2
  web1:
    image: myapp:latest
  web2:
    image: myapp:latest

健康检查和负载均衡

配置健康检查以确保流量仅流向健康的容器:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
  interval: 30s
  timeout: 10s
  retries: 3

Nginx 自动处理多个后端服务器之间的负载均衡,均匀分配请求并跳过不健康的服务器。

Docker 安全最佳实践和加固

在生产环境中运行 Docker 时,安全应该是首要考虑事项。容器安全涉及保护主机系统、镜像、容器和网络通信。以下是基本安全实践:

以非 Root 用户身份运行容器

永远不要以 root 身份运行容器。在 Dockerfile 中创建用户:

RUN useradd -m -s /bin/bash appuser
USER appuser

这限制了容器被攻击的损害。

资源限制和安全约束

设置资源限制以防止容器消耗过多系统资源并影响其他容器或主机:

docker run -m 512m --memory-swap 1g --cpus 1 image_name

使用 --cap-drop 标志删除容器不需要进行操作的不必要 Linux 功能。

镜像安全和扫描

网络安全

使用自定义 Docker 网络而不是主机网络模式来隔离容器。在 VPS 上定义防火墙规则以将流量限制为仅必要端口。对所有外部通信使用 HTTPS 和反向代理上的 SSL/TLS 证书。

容器注册表安全

如果使用私人注册表,确保使用强身份验证进行保护。使用镜像签名和验证来防止未授权镜像运行。定期审核使用中的镜像并删除不必要的镜像。

定期更新和监控

定期使用最新的安全补丁更新 Docker Engine、Docker Compose 和主机 OS。监控容器活动以查找可疑行为,并实施日志记录以跟踪容器操作。考虑使用 AsiaGB.com 进行 VPS 托管,它提供具有 SSD 存储、DirectAdmin 控制面板、99% 正常运行时间可靠性和 24 小时泰语支持的安全基础架构,以帮助保护您的 Docker 部署。

选择合适的 VPS 对于成功的 Docker 部署至关重要。合适的 VPS 提供商应提供充足的资源、可靠的性能和良好的支持。以下是为 Docker 选择 VPS 时要考虑的因素:

Docker VPS 的关键要求

为什么 AsiaGB.com 适合 Docker 托管

AsiaGB.com 是在泰国和东南亚托管 Docker 应用程序的绝佳选择。他们的 VPS 计划配备 SSD 存储以获得最佳容器性能,DirectAdmin 控制面板便于管理,并且可靠的 99% 正常运行时间保证。所有服务器都位于泰国和新加坡,提供 24 小时泰语支持,确保您在需要时获得帮助。他们的基础架构旨在实现高性能,在该地区具有出色的网络连接。

比较注意事项

评估 VPS 提供商时,不仅要比较价格,还要比较硬件质量、网络基础设施、备份选项和支持响应速度。对于 Docker 工作负载,来自可靠提供商的稍微更昂贵的计划比存在性能问题或支持不良的更便宜选项要好。

从中等计划开始,随着应用程序的增长而扩展。大多数提供商允许轻松升级,因此您可以从 4 GB RAM 和 4 个 CPU 核心开始,然后在需要时转移到更大的配置。

推荐AsiaGB.com — 我们使用并推荐的主机和VPS服务:泰国和新加坡服务器,SSD存储,通过DirectAdmin管理,提供24小时泰语支持,99%正常运行时间。

编辑精选,亲测推荐。

访问 AsiaGB →

常见问题(FAQ)

Docker 容器和虚拟机之间的主要区别是什么?
Docker 容器轻量级且共享主机 OS 内核,通常只使用几 MB 的 RAM。虚拟机较重,每个 VM 运行完整的 OS,使用数百 MB 或 GB 的资源。容器在几秒内启动,而虚拟机需要数分钟,使 Docker 更高效地在单个 VPS 上运行多个应用程序。
我需要成为专家才能在 VPS 上使用 Docker 吗?
不需要。虽然 Docker 有学习曲线,但基础知识很直接。从使用 Docker Hub 的现有镜像的简单容器开始,然后进展到用于多容器设置的 Docker Compose。有许多教程和社区可以帮助您学习。
我可以在 2GB RAM VPS 上运行 Docker 吗?
可以,但仅适用于轻量级应用程序或开发/测试。单个小型容器可能有效,但生产环境受益于至少 4 GB RAM 以确保稳定性和增长空间。在选择计划前考虑您的应用程序的具体需求。
如何在生产环境中更新 Docker 容器?
拉取新的镜像版本,停止旧容器,然后使用更新的镜像启动新容器。对于具有多个容器的零停机时间更新,使用 Nginx 等负载均衡器并一次更新一个容器。Docker Compose 可以在更新编写文件中的镜像版本后用 `docker-compose up -d` 命令自动执行此操作。