前言:
在前面的文章里,我们一直在“原生”的 Linux 环境里摸爬滚打。如果要装一个网站,你可能需要安装 Nginx,配置 PHP,再安装 MySQL… 一旦某个环节版本不对,或者你想卸载重装,残留的配置文件能把你搞得痛不欲生。
这就是著名的“环境地狱”。
今天,我们要引入一项改变了整个互联网开发模式的神器——Docker。
它可以把软件连同它需要的环境打包成一个标准的“集装箱”。无论你的服务器是什么系统,只要有 Docker,这个集装箱拿来就能跑,用完即扔,绝不污染系统。
准备好了吗?我们要开始施展魔法了。
1. 核心概念:镜像与容器
在敲命令之前,先搞懂两个名词,不然你会晕:
- 镜像 (Image): 相当于“安装包”或者游戏的“光盘”。它是只读的,哪怕你把系统搞崩了,镜像还是那个镜像。
- 容器 (Container): 相当于“运行中的程序”。它是基于镜像创建出来的实体。我们可以同时用一个镜像启动 10 个容器,就像用一张光盘装在 10 台电脑上一样。
2. 一键安装 Docker
在国外 VPS 上,安装 Docker 最简单的方法就是使用官方脚本。请复制下面这行命令(root 用户或 sudo 权限):
curl -fsSL https://get.docker.com | bash
等待进度条跑完。安装完成后,为了让我们以后不用每次都敲 sudo,把当前用户加入 Docker 组(记得把 test_user 换成你的用户名):
sudo usermod -aG docker test_user
重要: 运行完上面这行后,你需要断开 SSH 连接并重新登录,权限才会生效。
回来后,输入 docker -v,如果看到版本号,说明安装成功。
3. Hello World:你的第一个容器
按照国际惯例,我们先跑个最简单的。
docker run hello-world
运行结果分析:
你会发现系统提示 Unable to find image 'hello-world:latest' locally(本地没找到镜像)。
然后它会自动去 Docker Hub(官方仓库)下载。下载完后,屏幕上会打印一段 “Hello from Docker!” 的欢迎语,然后程序退出。
这就是 Docker 的魅力:自动下载、自动配置、开箱即用。
4. 实战:搭建 Nginx Web 服务器
光跑个文字没意思,我们要跑个能访问的网站服务。
docker run -d -p 8080:80 --name my-nginx nginx
命令拆解(这句要背下来):
-d(Detach):后台运行。不加这个,你关掉终端窗口,网站就挂了。-p 8080:80(Port):端口映射。这是重中之重!意思是把服务器的 8080 端口映射到容器内部的 80 端口。--name my-nginx:给容器起个名字,方便管理。nginx:镜像的名字。
见证奇迹的时刻:
1. 记得去防火墙放行端口:sudo ufw allow 8080/tcp。
2. 打开浏览器,输入 http://你的服务器IP:8080。
3. 你看到了 “Welcome to nginx!” 的页面了吗?恭喜,你成功了!
5. 常用 Docker 维护命令
服务跑起来了,怎么管理呢?这里有几条“家常”命令:
# 1. 查看正在运行的容器 docker ps
2. 查看所有容器(包括挂掉的)
docker ps -a
3. 停止容器
docker stop my-nginx
4. 删除容器(删除前必须先停止)
docker rm my-nginx
5. 删除镜像(清理磁盘空间时用)
docker rmi nginx
6. 进阶神器:Docker Compose
如果每次启动都要敲上面那么长一串命令,还要记参数,太累了。而且如果一个项目同时需要 Nginx、PHP 和 MySQL 三个容器配合怎么办?
这时候就需要 Docker Compose。它用一个 yaml 配置文件来管理所有的容器。
安装 Compose 插件:
(注:新版 Docker 已经内置了 compose,命令是 docker compose,不需要中间的横杠了,但为了兼容旧习惯,我们还是确认一下)。
docker compose version
实战:安装 Portainer(可视化面板)
既然我们是新手,肯定不想天天对着黑框敲 docker ps。我们来安装一个 Docker 的图形化管理界面——Portainer。用它来管理其他容器,简直爽飞。
1. 创建一个文件夹来存放配置:
mkdir -p ~/docker-data/portainer cd ~/docker-data/portainer
2. 创建 docker-compose.yml 文件:
vim docker-compose.yml
3. 粘贴以下内容(按 i 进入编辑,粘贴后按 Esc 输入 :wq 保存):
version: '3'
services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data:/data
4. 启动!
docker compose up -d
后续操作:
1. 别忘了防火墙:sudo ufw allow 9000/tcp
2. 访问 http://你的IP:9000。
3. 你会看到一个全图形化的界面,设置好管理员密码。以后你再想看容器状态、看日志、重启服务,只需要在网页上点点鼠标就行了!
7. 小结
恭喜你!你已经掌握了服务器运维最核心的技能——Docker。回顾一下:
- 我们安装了 Docker 引擎。
- 我们学会了用
docker run启动 Nginx。 - 我们学会了用
docker compose部署 Portainer。 - 我们拥有了一个可视化的 Docker 管理面板。
现在,你的 VPS 已经不是一台冷冰冰的代码机器,而是一个准备好接纳各种有趣应用的“应用商店”。
下一篇,你想部署什么?是个人博客 (WordPress)?是私人网盘 (Nextcloud)?还是专属的密码库 (Bitwarden)?
有了 Docker,这些都只需要几行代码就能搞定。我们下期见!