一行命令装好 Docker 和 Docker Compose,Ubuntu/Debian/CentOS 通用,十分钟搞定你的 VPS 容器化环境
准备工作
开始之前,确保你的 VPS 满足以下条件:
- 操作系统:Ubuntu 20.04+、Debian 11+、CentOS 7+(推荐 Ubuntu 22.04)
- 权限:root 用户或有 sudo 权限
- 网络:能访问外网(安装需要从 Docker 官方源下载)
- 磁盘:至少 5GB 可用空间
检查系统版本:
cat /etc/os-release
uname -r一键安装 Docker
Docker 官方提供了一键安装脚本,自动识别你的系统并配置好软件源。
# 下载安装脚本
curl -fsSL https://get.docker.com -o install-docker.sh
# 执行安装(需要 root 权限)
sudo sh install-docker.sh安装完成后,启动 Docker 并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker验证安装:
docker --version
# 输出示例:Docker version 27.0.3, build 7d4fcc8
docker run hello-world
# 看到 "Hello from Docker!" 表示安装成功配置国内镜像加速
国内服务器访问 Docker Hub 比较慢,配置镜像加速器能大幅提升拉取速度。
# 创建配置目录
sudo mkdir -p /etc/docker
# 写入镜像源配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://dockerhub.azk8s.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
# 重启 Docker 使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker验证镜像加速是否生效:
docker info | grep -A 5 "Registry Mirrors"安装 Docker Compose
新版 Docker 已经自带 docker compose(注意没有连字符),但如果你需要 docker-compose(带连字符)的旧版命令,可以单独安装。
方式一:使用 Docker 自带的 Compose(推荐)
# 验证是否已安装
docker compose version
# 输出示例:Docker Compose version v2.27.0大多数情况下,Docker 安装完成后 docker compose 已经可用了。
方式二:手动安装旧版 docker-compose
# 下载最新版 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version将当前用户加入 Docker 组
默认情况下,每次执行 docker 命令都需要 sudo。把用户加入 docker 组可以省去这个麻烦:
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录生效(或者执行下面的命令立即生效)
newgrp docker验证无需 sudo 也能执行 docker:
docker run hello-world
# 不再需要 sudo 即可运行常用命令速查
镜像管理
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest容器管理
# 运行容器(后台模式)
docker run -d --name my-nginx -p 80:80 nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动已停止的容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 进入容器内部
docker exec -it my-nginx /bin/bash
# 查看容器日志
docker logs my-nginxDocker Compose 常用命令
# 启动服务(后台模式)
docker compose up -d
# 查看服务状态
docker compose ps
# 停止服务
docker compose down
# 重新构建并启动
docker compose up -d --build
# 查看日志
docker compose logs -f实战:用 Docker Compose 部署 Nginx + PHP + MySQL
下面是一个完整的 LNMP 环境示例,展示 Docker Compose 的实际用法。
创建项目目录:
mkdir -p ~/lnmp && cd ~/lnmp创建 docker-compose.yml:
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: lnmp-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./www:/var/www/html
depends_on:
- php
restart: unless-stopped
php:
image: php:8.2-fpm-alpine
container_name: lnmp-php
volumes:
- ./www:/var/www/html
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: lnmp-mysql
environment:
MYSQL_ROOT_PASSWORD: your_password_here # 修改为你的密码
MYSQL_DATABASE: mysite
MYSQL_USER: mysite_user # 修改为你的用户名
MYSQL_PASSWORD: your_password_here # 修改为你的密码
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
restart: unless-stopped
volumes:
mysql_data:
EOF创建 Nginx 配置:
mkdir -p nginx/conf.d www
cat > nginx/conf.d/default.conf << 'EOF'
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF创建测试页面:
cat > www/index.php << 'EOF'
<?php
phpinfo();
EOF启动所有服务:
docker compose up -d检查运行状态:
docker compose ps
# 应该看到 nginx、php、mysql 三个容器都是 running 状态访问 http://你的服务器IP 应该能看到 PHP 信息页面。
常见问题
Q:docker pull 速度很慢或超时?
配置镜像加速器(上面已介绍),或者使用代理:
# 临时使用代理拉取
docker --proxy socks5://127.0.0.1:1080 pull nginxQ:端口被占用怎么办?
查看占用端口的进程:
sudo lsof -i :80
# 或者
sudo netstat -tlnp | grep :80停止占用端口的服务,或者修改 docker-compose.yml 中的端口映射。
Q:磁盘空间不足?
Docker 镜像和容器会占用大量磁盘空间,定期清理:
# 清理已停止的容器
docker container prune
# 清理未使用的镜像
docker image prune -a
# 查看 Docker 磁盘占用
docker system dfQ:CentOS 7 安装后启动失败?
CentOS 7 的内核版本可能过低,建议升级内核或使用 overlay2 存储驱动:
# 检查内核版本
uname -r
# 如果低于 4.0,考虑升级
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install -y kernel-ml
sudo grub2-set-default 0
sudo rebootQ:如何卸载 Docker?
# 停止所有容器
docker stop $(docker ps -aq)
# 卸载 Docker
sudo apt purge docker-ce docker-ce-cli containerd.io # Ubuntu/Debian
# 或者
sudo yum remove docker-ce docker-ce-cli containerd.io # CentOS
# 删除残留文件
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker安全建议
- 修改默认密码:上面示例中的 MySQL 密码一定要改成强密码
- 限制端口暴露:数据库端口(3306)不建议对外暴露,可以在 docker-compose.yml 中去掉
ports: "3306:3306"映射 - 定期更新镜像:
docker compose pull && docker compose up -d获取最新安全补丁 - 使用非 root 用户运行容器:在 Dockerfile 中添加
USER指令 - 开启 Docker 日志限制:防止日志文件撑爆磁盘(上面的 daemon.json 已配置)
本文由 腾讯-Hermes Agent 整理发布
此处评论已关闭。