搬瓦工安装Docker教程:从零搭建容器环境
前置准备
- 已购买搬瓦工VPS并能正常SSH连接
- VPS系统为CentOS 7+、Debian 10+或Ubuntu 20.04+
- 具备基本的Linux命令行操作能力
说实话,自从用上Docker之后,我在搬瓦工上折腾各种服务方便了太多。以前装个WordPress要配Nginx、PHP、MySQL一堆东西,现在一个docker-compose up -d就搞定了。这篇教程我把自己在搬瓦工上装Docker踩过的坑都整理出来了,照着做半小时就能搭好完整的容器环境。
开始前的准备
在动手之前,确认以下几点:
- SSH已连通:能正常连接到你的搬瓦工VPS(不会连的看 SSH连接教程)
- 系统版本:CentOS 7+、Debian 10+ 或 Ubuntu 20.04+ 都行,推荐 Ubuntu 22.04
- 内存要求:跑Docker本身512MB够了,但要部署应用建议1GB以上
我个人习惯用Ubuntu,下面的命令我会同时给出Debian/Ubuntu和CentOS两个版本,你对照自己的系统来就行。
不确定自己是什么系统的,SSH上去跑一下:
cat /etc/os-release
第一步:更新系统和安装依赖
不管什么系统,装软件前先更新一下包管理器,避免依赖版本冲突。
Debian / Ubuntu
apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release
CentOS
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
这一步通常很快,一两分钟就完了。如果你的VPS是刚开通的全新系统,更新的包会多一些,耐心等几分钟。
第二步:安装Docker引擎
Docker官方提供了一个很方便的一键安装脚本,省去了手动添加仓库源的麻烦。这是我最推荐的安装方式,不管你是什么Linux发行版都能用:
curl -fsSL https://get.docker.com | sh
跑完之后,启动Docker并设置开机自启:
systemctl start docker
systemctl enable docker
验证一下是否安装成功:
docker --version
正常的话会输出类似 Docker version 27.x.x, build xxxxxx 的信息。
手动安装(如果一键脚本失败)
有时候网络不好,一键脚本可能跑不通。这种情况可以手动添加Docker的官方源来安装。
Ubuntu/Debian手动安装:
# 添加Docker官方GPG密钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS手动安装:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker && systemctl enable docker
踩坑提醒
我之前在一台CentOS 7的搬瓦工上装Docker,死活装不上,报各种依赖冲突。后来发现是系统自带了一个很老版本的podman-docker包在捣乱。解决办法是先卸载干净:
yum remove -y docker docker-client docker-common docker-latest podman-docker
然后再重新跑安装脚本就好了。如果你也遇到类似问题,先把旧的Docker相关包清理掉再装。
第三步:安装Docker Compose
好消息是,如果你用上面的方法装Docker,Docker Compose V2(也就是docker compose命令,注意没有中间的横杠)通常已经作为插件自带了。
验证一下:
docker compose version
如果输出了版本号,说明已经有了,直接跳到下一步。
如果没有,手动装一下:
# 下载最新版Docker Compose插件
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
再验证一次:
docker compose version
# 输出类似:Docker Compose version v2.x.x
到这里,Docker和Docker Compose就都装好了。
第四步:部署WordPress实战
光装好Docker没意思,来部署一个实际的应用感受一下容器的威力。我们用WordPress+MySQL做演示,这也是很多人买搬瓦工VPS的实际用途之一。
创建项目目录
mkdir -p /opt/wordpress && cd /opt/wordpress
编写docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: "3.8"
services:
mysql:
image: mysql:8.0
container_name: wp-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password_here
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: your_wp_password_here
volumes:
- mysql_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wp-app
restart: always
depends_on:
- mysql
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: your_wp_password_here
volumes:
- wp_data:/var/www/html
volumes:
mysql_data:
wp_data:
EOF
注意:把 your_root_password_here 和 your_wp_password_here 换成你自己的强密码,别用我这个示例密码。
启动服务
docker compose up -d
第一次跑会拉取镜像,根据搬瓦工的网络情况,大概需要2-5分钟。你会看到它依次下载MySQL和WordPress的镜像层。
拉取完成后,两个容器会自动启动。
验证服务状态
docker compose ps
正常输出应该是这样的(两个容器都是Up状态):
NAME STATUS PORTS
wp-app Up 2 minutes 0.0.0.0:8080->80/tcp
wp-mysql Up 2 minutes 3306/tcp
现在打开浏览器,访问 http://你的VPS_IP:8080,应该能看到WordPress的安装向导页面了。
如果访问不了,八成是防火墙的问题。搬瓦工默认的iptables可能没放行8080端口:
# 放行8080端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
第五步:Docker常用命令速查
装好之后,这些命令你会经常用到,建议收藏:
容器管理
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止/启动/重启容器
docker stop wp-app
docker start wp-app
docker restart wp-app
# 查看容器日志(排错神器)
docker logs wp-app
docker logs -f wp-app # 实时跟踪日志
# 进入容器内部
docker exec -it wp-app bash
镜像管理
# 查看已下载的镜像
docker images
# 拉取/更新镜像
docker pull nginx:latest
# 清理无用镜像(释放磁盘空间)
docker image prune -a
Docker Compose 常用操作
# 启动所有服务(后台运行)
docker compose up -d
# 停止所有服务
docker compose down
# 停止并删除数据卷(慎用,会丢数据)
docker compose down -v
# 查看服务日志
docker compose logs -f
# 重新构建并启动
docker compose up -d --build
资源监控
# 查看容器资源占用(CPU、内存)
docker stats
# 查看Docker磁盘占用
docker system df
# 一键清理所有无用资源
docker system prune -a
进阶技巧
配置Docker镜像加速
搬瓦工的VPS在海外,拉取Docker Hub镜像速度本身就不错,一般不需要配镜像加速。但如果你发现拉取镜像特别慢,可以配置一下:
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
systemctl daemon-reload && systemctl restart docker
这里我顺便配了日志大小限制。Docker容器的日志默认不限大小,跑久了日志文件能把磁盘撑满,这个坑我踩过一次,直接导致VPS磁盘100%然后SSH都连不上了。加上 max-size 限制后就不用担心了。
开启BBR加速
如果你的Docker容器提供Web服务,配合BBR加速效果会更好。具体怎么开可以看 BBR加速教程,开启后容器内的网络传输速度也能受益。
常见问题排查
Cannot connect to the Docker daemon
这个报错说明Docker服务没启动:
systemctl start docker
systemctl status docker
如果status显示failed,看一下具体错误日志:
journalctl -u docker.service --no-pager -n 50
端口被占用
启动容器时报 port is already allocated,说明端口冲突了。查看端口占用情况:
ss -tlnp | grep 8080
要么改docker-compose.yml里的端口映射,要么停掉占用端口的服务。如果你装了 宝塔面板,注意避开它的端口。
磁盘空间不足
Docker镜像和容器数据挺占空间的。搬瓦工的SSD容量有限,要养成定期清理的习惯:
# 查看Docker占用了多少磁盘
docker system df
# 清理已停止的容器、未使用的镜像和网络
docker system prune -a --volumes
到这儿,你的搬瓦工VPS就已经是一台功能完备的Docker服务器了。后面不管是部署博客、跑爬虫、还是搭建各种Web服务,都可以用Docker来管理,干净利落不怕环境污染。有什么问题欢迎留言交流。
Docker安装常见问题
搬瓦工最低配置能跑Docker吗?
Docker和宝塔面板能一起用吗?
安装Docker后VPS变卡了怎么办?
CentOS 7还能装Docker吗?
怎么让Docker容器开机自动启动?
常见问题
- 搬瓦工最低配置能跑Docker吗?
- 能跑,但会比较吃力。Docker本身占用不大,大概100MB内存左右。但如果你要跑WordPress+MySQL这种组合,建议至少1GB内存的方案。512MB的机器跑个Nginx或者轻量级应用还是没问题的。
- Docker和宝塔面板能一起用吗?
- 技术上可以,但不太推荐。两者都会监听端口,容易冲突。如果你已经装了宝塔,Docker容器的端口映射要避开宝塔已经占用的80、443、888、8888等端口。实在要一起用的话,建议用Nginx反向代理来分流。
- 安装Docker后VPS变卡了怎么办?
- 先用docker stats看看是哪个容器吃资源。大概率是某个容器的内存占用太高。可以在docker-compose.yml里加内存限制,比如deploy.resources.limits.memory: 512m。另外检查下是不是容器日志文件太大了,用docker system prune清理一下无用的镜像和容器。
- CentOS 7还能装Docker吗?
- 能装,但Docker官方已经不推荐了。CentOS 7的内核版本比较老(3.10),部分Docker新特性用不了。如果你的搬瓦工还是CentOS 7,建议在KiwiVM面板里重装成Ubuntu 22.04或Debian 12,重装只要几分钟。
- 怎么让Docker容器开机自动启动?
- 两个层面:首先确保Docker服务本身开机自启(systemctl enable docker),然后给需要自启的容器加上--restart=always参数。用docker-compose部署的话,在yml文件里加restart: always就行。
编辑部
了解更多