跳过正文
  1. 系列/
  2. VPS 实战系列/

任务 4:全面拥抱 Docker 与容器化部署初体验

其雁过无痕
作者
其雁过无痕
目录

背景与目标
#

在完成了服务器基础的安全加固与虚拟内存分配后,环境搭建正式进入容器化阶段。本次实践的核心目标是全面拥抱 Docker。摒弃传统的“直接在宿主机装一切”的做法,转而通过编写 docker-compose.yml 文件来统一管理和启动服务 。

这样做最大的收获在于掌握了现代化的容器化技术:无论未来如何更换服务器,只需要几行命令就能瞬间恢复所有服务,并且能保持宿主机环境极其干净 。这不仅是云服务器管理的最佳实践,也是计算机专业学生向 DevOps 迈进的关键一步。

核心原理解析:为什么选择 Docker?
#

在本次 RackNerd VPS 的实践中,我深刻理解了**“基础设施即代码”(Infrastructure as Code)**的概念。

传统的服务器部署,应用与宿主机的操作系统、环境变量深度绑定,迁移成本极高。而 Docker 通过将应用程序及其依赖打包成标准的“镜像(Image)”,彻底改变了这一现状。

  • 隔离与干净: 所有的服务都在各自的容器内运行,互不干扰,宿主机仅仅提供 Docker 运行的引擎 。
  • 迁移逻辑重塑: 服务器搬家不再需要重新配置复杂的运行环境。只需要备份“架构图纸”(docker-compose.yml 文件)以及“核心数据”(映射到宿主机的目录)。在新服务器上,只需拉取镜像并根据图纸重新启动,即可实现分钟级的服务无损复原。

实践操作记录 (Ubuntu 24.04 环境)
#

1. 规范化安装 Docker 引擎
#

为了获取最新且稳定的功能,通过添加官方 HTTPS 软件源的方式进行安装 :

# 1. 安装必要的依赖
sudo apt-get update
sudo apt-get install ca-certificates curl

# 2. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 3. 将 Docker 仓库添加到软件源列表 (自动感知 CPU 架构与系统版本)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装 Docker 及其 Compose 插件
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2. 编写并启动第一个容器 (Nginx)
#

创建一个独立的测试目录,编写 docker-compose.yml 来映射端口并启动 Nginx 服务 :

services:
  my-web-server:
    image: nginx:latest
    ports:
      - "8080:80"

启动命令:sudo docker compose up -d-d 参数表示在后台运行,断开 SSH 后服务依然在线)。

避坑指南(Troubleshooting)
#

在首次启动容器时,遇到了典型的 YAML 解析报错:

yaml: line 1, column 24: mapping values are not allowed in this context

错误原因与解决方案: YAML 是一种对缩进和格式要求极为严苛的配置语言。该报错通常是因为:

  1. 复制粘贴时带入了多余的不可见字符或说明文字。
  2. 错误地使用了 Tab 键进行缩进(YAML 规范要求必须使用空格对齐层级)。

清空文件内容,确保只有纯净的代码和正确的空格缩进后,服务成功启动。可以通过 curl http://localhost:8080 在终端验证 Nginx 的欢迎页面。

相关文章

任务 3:熟练使用终端复用工具

核心目标 # 操作:安装并学习使用 tmux。 收获:掌握在服务器上跑长耗时任务的能力。即使本地 SSH 突然断开,任务依然会在后台运行,不会前功尽弃。 核心工具:tmux # tmux (Terminal Multiplexer) 是现代服务端开发的必备工具,解决了远程连接中途掉线导致任务中断的痛点。

任务 2:分配虚拟内存 (Swap)

Linux 服务器运维笔记:分配虚拟内存 (Swap) 避坑与实操 # 0. 背景与目标 # 在小内存(如 1GB RAM)的云服务器上运行 Java、MySQL 或进行前端构建时,物理内存极易耗尽导致进程被系统杀掉(OOM)。Swap(交换空间) 充当了“虚拟内存”的角色,是服务器在高负载下的“救命支撑”。