云服务器中使用 Docker 搭建子服务器
在云计算环境中,使用 Docker 容器技术可以实现更灵活的服务部署方案。本文介绍如何利用 Docker 搭建轻量级的子服务器,减少对特定云服务提供商的依赖,实现快速迁移。
你有没有遇到过这种情况:在一台云服务器上辛辛苦苦配好了环境、装好了各种依赖,结果某天需要换服务商或者加一台机器,发现所有事情得从头来一遍?
这正是我开始用 Docker 搭建”子服务器”的原因。把应用跑在容器里,而不是直接装在宿主机上,迁移的时候打个包就走,几分钟就能在新机器上跑起来。
为什么选择 Docker?
直接在云服务器上部署应用当然可以,但时间一长你会发现几个头疼的问题:环境难以复现、迁移成本高、不同应用之间互相干扰。Docker 恰好解决了这些痛点:
- 可移植性强:容器可以轻松地在不同云服务器间迁移
- 环境隔离:应用程序运行在独立的容器环境中,不受宿主机影响
- 资源高效:比传统虚拟机更轻量,资源消耗更少
- 快速部署:容器启动速度快,便于快速扩展
简单来说,Docker 让你的服务器环境变成了”随身携带”的东西,而不是绑死在某台机器上。
Docker 基础操作指南
接下来我们从零开始,一步一步把容器跑起来。
配置 Docker 权限
装好 Docker 之后,第一件事是把当前用户加到 docker 用户组里。不然每次执行命令都要加 sudo,用起来很烦:
sudo usermod -aG docker $USER
注意,添加后需要重新登录才能生效,别改完就直接跑命令,不然会报权限错误。
Docker 容器管理
创建并运行容器
一行命令就能创建一个基于 Ubuntu 的容器,同时把 SSH 端口映射出来:
docker run --name my_server -p 20000:22 -itd ubuntu:20.04
这里每个参数都有用,拆开来看:
--name my_server:指定容器名称-p 20000:22:将容器的22端口映射到宿主机的20000端口-itd:交互式终端,后台运行ubuntu:20.04:使用的镜像
端口映射这一步很关键 — 之后你就可以通过宿主机的 20000 端口 SSH 进容器了,就像连接一台独立的服务器一样。
进入容器
容器跑起来之后,用 attach 进去:
docker attach my_server
进去第一件事,给 root 设个密码,不然后面配 SSH 的时候会很麻烦:
passwd
容器操作技巧
有个小技巧很实用:想要临时退出容器但又不想把它停掉,可以用挂起操作:
- 先按
Ctrl+p - 再按
Ctrl+q
这样容器会继续在后台运行,而你回到了宿主机的终端。如果直接输 exit 或者按 Ctrl+d,容器就停了,这个区别一定要记住。
容器迁移方案
这是整篇文章最核心的部分 — 怎么把一个配好的容器搬到另一台机器上。整个流程分五步,看起来多,但每一步都很简单。
1.将容器保存为镜像
docker commit my_server my_custom_image:v1
2.将镜像导出为文件
docker save -o my_server_image.tar my_custom_image:v1
3.设置文件权限并传输
chmod +r my_server_image.tar
scp my_server_image.tar user@new-server:/path/to/destination
4.在新服务器上加载镜像
docker load -i my_server_image.tar
5.从镜像创建新容器
docker run --name my_server -p 20000:22 -itd my_custom_image:v1
走完这五步,你在旧服务器上的所有配置、安装的软件、修改的文件,全部都原封不动地搬到了新服务器上。这就是 Docker 最让人省心的地方。
容器配置技巧
容器跑起来之后,还有几个实用的配置值得做。
加速软件安装
如果你的服务器在国内,apt 默认的源下载速度会很慢。换成清华大学的镜像源可以大幅提升速度:
这一步建议在容器创建后第一时间做,后面装什么都会快很多。
用户管理
生产环境下不建议一直用 root 操作,创建一个普通用户并给 sudo 权限是更安全的做法:
# 创建新用户
adduser username
# 授予sudo权限
usermod -aG sudo username
自定义登录欢迎信息
如果你管理多个容器,自定义一下登录时的欢迎信息可以帮你快速区分当前在哪个环境里:
nano /etc/update-motd.d
写在最后
用 Docker 搭建子服务器这个方案,我自己用下来最大的感受就是”安心”。不用再担心换服务商的时候要重新配环境,也不用担心某个应用的依赖把系统搞乱。每个容器都是独立的,打包带走就行。
如果你也经常需要在多台服务器之间折腾,或者想给自己的部署流程留一条后路,不妨试试这个思路。