VPS安装Docker 教程,Docker 有什么优点?

最近在折腾 VPS 的时候,我发现很多支持 Docker 的国外 VPS。而且不管是部署个人项目、搭建测试环境,还是跑各种服务,Docker 几乎成了标配工具。

为什么 Docker 这么受欢迎?说白了,它解决了我们最头疼的问题:环境配置

以前在本地能跑的程序,搬到服务器上就各种报错,光是排查环境问题就能耗掉大半天。有了 Docker 之后,你只需要打包一次,到哪都能用,这种便利性真的没法拒绝。

对于我们这些个人开发者来说,VPS安装Docker 已经成了搭建服务器的第一步。不管你租的是国内还是国外的 VPS,装上 Docker 之后,部署应用的效率能提升好几倍。

Docker 的优势特点

VPS安装Docker
VPS安装Docker

为什么我推荐个人开发者用 Docker

相信你也听过 Kubernetes、各种编排平台。但真正用下来才发现,这些更适合大规模集群和团队协作。对于个人开发者来说,最实用、最容易上手、也最有价值的,其实还是 Docker。

1、环境一致性问题彻底解决

如果你部署过项目,相信遇到过本地运行得好好的程序,上传到服务器后各种报错。

可能是 Python 版本不一样,可能是依赖包版本冲突,也可能是配置文件路径对不上。每次都要花大把时间排查问题,改完这个又冒出那个。

Docker 通过镜像机制把这个问题彻底解决了。你可以把应用程序、运行时环境、系统库、依赖包全部打包到一个镜像里。这个镜像在任何安装了 Docker 的机器上都能保持一致的运行结果。

2、应用隔离带来的灵活性

Docker 通过 Linux 的 namespace 和 cgroups 技术实现容器隔离。每个容器都有独立的文件系统、进程空间、网络栈,互不干扰。因此即使遇到应用异常也不会影响整个服务器。

这种隔离性让我可以在同一台服务器上运行不同版本的技术栈。比如有个老项目用 Node.js 12,新项目用 Node.js 20,两个容器各自运行,完全不会冲突。

端口管理也变得简单了。容器内部的端口是隔离的,我可以让多个容器都监听 3000 端口,通过 Docker 的端口映射功能分别映射到宿主机的不同端口。

网络隔离也很实用。我可以创建自定义网络,让某些容器处于同一网络可以互相通信,其他容器访问不到。比如数据库容器只开放给应用容器访问,不暴露到外网,安全性更高。

3、镜像生态非常丰富

Docker Hub 上托管了数百万个镜像,几乎所有主流开源软件都有官方维护的镜像。MySQL、PostgreSQL、Redis、Nginx、MongoDB……需要什么直接拉取就能用。

这些官方镜像都经过优化和安全加固,比自己从源码编译安装要省心得多。而且镜像都有详细的文档说明,告诉你怎么设置环境变量、怎么持久化数据、怎么配置参数。

测试新技术也特别方便。想试试 Elasticsearch?拉个镜像启动容器,玩完了直接删掉,不会在系统里留下任何残留文件。这种干净的环境管理方式,对开发者来说太友好了。

4、资源占用远低于虚拟机

Docker 容器和传统虚拟机的本质区别在于架构层面。虚拟机需要在宿主机上运行完整的操作系统,包括内核、系统库、应用程序等,每个虚拟机都是一个完整的系统副本。

而 Docker 容器直接共享宿主机的内核,只需要打包应用层的内容。这意味着容器的镜像体积更小,启动速度更快,内存占用更少。因此可以承载更多应用容器。

容器的启动速度也是虚拟机无法比的。虚拟机启动需要加载完整操作系统,通常要几十秒甚至几分钟。Docker 容器启动只需要启动应用进程,基本上都是秒级启动。

为什么我不推荐个人开发者用 K8s

可能有人会问,既然都学容器了,为什么不直接上 Kubernetes?毕竟现在 K8s 这么火。

我的看法是,K8s 确实强大,但对个人开发者来说真的太重了

K8s 是给大公司管理成百上千个容器用的,配置复杂得吓人。我第一次学习 K8s,光环境搭起来就花了两天时间,还得准备至少三台服务器做集群。各种 YAML 配置文件看得我眼花,Pod、Service、Ingress、Deployment……概念一堆,学习曲线陡得要命。

关键是,我们个人项目真的需要这么复杂的架构吗?我博客一天访问量也就几百,用 Docker 跑一个容器完全够用。为了学 K8s 投入那么多时间精力,还不如把功夫花在优化项目本身上。

除非你是为了找工作专门学习,或者公司要求用 K8s,否则真没必要折腾

Docker Compose 简化多容器管理

实际项目中经常需要多个服务协同工作。比如一个 Web 应用通常需要应用服务器、数据库、缓存。如果手动管理每个容器,需要分别启动、配置网络、设置依赖关系,非常繁琐。

Docker Compose 通过一个 YAML 文件定义整个应用栈。你可以在文件里声明需要哪些服务、它们的镜像版本、环境变量、端口映射、数据卷挂载、网络配置等。

定义好之后,一条 docker-compose up 命令就能启动所有服务。

而且 Docker Compose 还能很方便地扩展服务实例数量。需要多跑几个应用容器做负载均衡?改一个参数就行。虽然比不上 K8s 的自动编排能力,但对个人项目来说完全够用。

总结一下,Docker 给个人开发者带来的核心价值是:环境一致性保证、资源利用率高、应用隔离灵活、学习成本低、生态完善。如果你只是想在 VPS 上高效部署和管理应用,Docker 是最合适的选择。至于 K8s,等你真的需要管理大规模集群的时候再考虑也不迟。

接下来我就详细讲解如何进行 VPS安装Docker。

VPS安装Docker 的步骤

在对VPS安装Docker 之前,我想提醒你,不同的 Linux 发行版安装 Docker 的方式略有不同。这里我主要介绍在 Ubuntu 和 CentOS 这两个最常用的系统上安装 Docker 的步骤。

Ubuntu 系统安装 Docker

1、更新软件包列表

sudo apt update
sudo apt upgrade -y

2、安装必要的依赖包

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3、添加 Docker 官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4、添加 Docker 软件源

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

5、安装 Docker

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

CentOS系统安装Docker

1、安装必要的依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加 Docker 软件源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装 Docker

sudo yum install -y docker-ce docker-ce-cli containerd.io

安装后的通用配置

1、启动 Docker 服务

sudo systemctl start docker
sudo systemctl enable docker

2、验证安装

docker --version
docker run hello-world

3、配置当前用户可直接使用 Docker(可选)

sudo usermod -aG docker $USER

注意:配置完成后需要重新登录才能生效

如果你觉得手动安装过程复杂,你可以使用 1Panel Linux 面板能让这个过程变得更加简单直观,在安装 1Panel 的过程中就能自动完成 Docker 的安装,而且还能大大简化运维难度。

国内如何使用 Docker 的说明

如果你在国内使用 Docker,大概率会遇到一个让人头疼的问题:拉取镜像的时候网络连接各种超时。这不是你的网络问题,而是 Docker Hub 官方镜像仓库在国内访问确实不太稳定。

我刚开始用 Docker 的时候也被这个问题困扰过,拉个 Ubuntu 镜像能等半天甚至失败。

配置国内镜像加速源

最直接的解决方案就是配置国内的镜像加速源。这些镜像源会定期同步 Docker Hub 的内容,国内访问速度快很多。我平时用得比较多的几个源:

  • 阿里云镜像加速器:需要注册阿里云账号,然后在容器镜像服务里获取专属加速地址
  • 腾讯云镜像源https://mirror.ccs.tencentyun.com
  • 中科大镜像源https://docker.mirrors.ustc.edu.cn
  • 网易镜像源https://hub-mirror.c.163.com

配置方法也很简单,编辑 Docker 的配置文件 /etc/docker/daemon.json,加入镜像源地址:

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

配置完后重启 Docker 服务就生效了。你可以配置多个镜像源,Docker 会自动选择可用的源去拉取镜像。不同地区、不同运营商的网络情况不一样,建议你自己测试一下哪个源速度最快。

使用运维面板更省心

如果你觉得手动编辑配置文件麻烦,可以用运维面板来管理 Docker。而且这类面板通常都内置了镜像加速功能,点几下鼠标就能搞定。

我现在用的是 1Panel,界面设计得挺现代化的,操作也简单。它有这些优点:

  • 自带镜像加速 1Panel 提供了自己的镜像加速服务,地址是 https://docker.1panel.live。安装完面板后会自动配置好,不需要你手动操作。
  • 可视化管理容器 不用敲命令行,在网页上就能创建容器、查看日志、监控状态。对于不熟悉命令行的人来说特别友好。
  • 支持多种镜像源 除了自带的加速源,你还可以添加阿里云、腾讯云等其他镜像源。面板会自动选择最快的源,也可以手动切换。
  • 一键安装 Docker 如果你的 VPS 还没装 Docker,1Panel 可以一键帮你装好,连镜像源都配置好了。省去了很多配置步骤。

对于新手来说,用面板确实能省不少事儿。我现在管理多台服务器,基本都装了 1Panel,统一管理起来方便很多。

海外 VPS 中转方案

镜像加速源虽然能解决大部分问题,但有些场景下还是会遇到麻烦。

比如我在国内打包开源项目的时候,尝试多种镜像源配置 Linux 终端代理,构建容器时还是会遇到网络问题。例如容器内执行 apt-getnpm install 这些操作特别慢、卡死失败。

后来我换了个思路:直接用海外 VPS 来处理这些事情。

海外 VPS 访问 Docker Hub 没有任何限制,下载速度特别快。而且现在便宜的美国 VPS 一年也就 80 块钱左右,买个最低配的专门用来下载镜像,性价比挺高的。

我现在的做法是:需要构建镜像或者拉取特殊镜像的时候,直接在海外 VPS 上操作。下载好之后导出镜像文件,传到国内 VPS 再导入。虽然多了一步,但整体效率反而更高。

我的实际使用经验

我现在的方案是:国内镜像源 + 海外 VPS 中转

平时拉取常用镜像,比如 Nginx、MySQL、Redis 这些,直接用国内镜像源,速度又快又稳定。遇到镜像源没有的镜像,或者需要构建自定义镜像的时候,就用海外 VPS 来处理。

在 VPS 安装 Docker 的时候,我一般会先装个 1Panel 面板,让它自动配置好基础环境。然后再根据实际需要添加其他镜像源。如果确实需要频繁构建镜像,就再买个便宜的海外 VPS 做中转。

这套方案用下来,基本没再遇到过网络问题卡住项目进度的情况。国内用 Docker 确实有些额外的配置工作,但配置好之后使用起来和国外没什么区别。

结语:拥抱 Docker

在 VPS 上安装 Docker 已经成为个人开发者的标配操作。

Docker 通过容器化技术解决了环境一致性问题,而且比 Kubernetes 这类复杂的容器编排工具,Docker 学习成本低、资源占用少、部署效率高,更适合我们个人项目使用。

VPS 安装 Docker 的过程其实并不复杂,按照本文的步骤操作,十几分钟就能搞定。安装完成后,你就能享受到容器化带来的便利:一条命令部署应用、轻松管理多个服务、快速测试新技术。

对于国内用户来说,网络环境确实是个挑战。但通过配置镜像加速源、使用运维面板、或者准备一台海外 VPS 做中转。我自己用的是国内镜像源 + 海外 VPS 的组合方案,能覆盖了所有场景。

常见问题解答(FAQ)

Q1:Docker 和虚拟机有什么区别?为什么 Docker 更轻量?

Docker 和传统虚拟机最大的区别在于架构层次。虚拟机需要模拟完整的操作系统,包括内核和系统调用,而 Docker 容器共享宿主机的操作系统内核,只包含应用程序和必要的依赖。

Q2:VPS 配置要求多高才能运行 Docker?

Docker 对硬件要求其实不高。1 核 1G 内存的 VPS 就能跑 Docker,同时运行 2-3 个轻量级容器没问题。如果你需要运行数据库这类占用资源稍多的服务,建议至少 2 核 2G。

Q3:Docker 容器的数据会丢失吗?

默认情况下,容器删除后里面的数据确实会丢失。

Docker 提供了数据卷(Volume)机制来持久化数据。你可以在创建容器时通过 -v 参数挂载数据卷,把容器内的数据目录映射到宿主机上。

Q4:在国内拉取镜像还是很慢怎么办?

如果配置了镜像加速源还是慢,可以尝试多配置几个镜像源,让 Docker 自动选择可用的。阿里云、腾讯云、网易、中科大的源都加上,总有一个速度快的。

如果还是不行,就用我文章里提到的海外 VPS 中转方案。

Q5:Docker 和宝塔面板能一起用吗?

可以的,其实宝塔面板也是类似的,也有 Docker 功能模块。指向相比 1Panel 全是围绕 Docker 设计,宝塔面板仍然存在部分直接安装在 VPS 的应用。

Q6:Docker 容器之间怎么互相访问?

Docker 提供了网络功能来实现容器间通信。

默认情况下,同一台宿主机上的容器可以通过容器名称互相访问。比如你有一个 Web 应用容器和一个 MySQL 容器,在 Web 应用的配置里,数据库地址填 mysql (容器名称)就能连接。

发表评论