一键部署 Docker 和 Docker Compose:Ubuntu/Debian/CentOS 通用教程

一行命令装好 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-nginx

Docker 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 nginx

Q:端口被占用怎么办?

查看占用端口的进程:

sudo lsof -i :80
# 或者
sudo netstat -tlnp | grep :80

停止占用端口的服务,或者修改 docker-compose.yml 中的端口映射。

Q:磁盘空间不足?

Docker 镜像和容器会占用大量磁盘空间,定期清理:

# 清理已停止的容器
docker container prune

# 清理未使用的镜像
docker image prune -a

# 查看 Docker 磁盘占用
docker system df

Q: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 reboot

Q:如何卸载 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

安全建议

  1. 修改默认密码:上面示例中的 MySQL 密码一定要改成强密码
  2. 限制端口暴露:数据库端口(3306)不建议对外暴露,可以在 docker-compose.yml 中去掉 ports: "3306:3306" 映射
  3. 定期更新镜像docker compose pull && docker compose up -d 获取最新安全补丁
  4. 使用非 root 用户运行容器:在 Dockerfile 中添加 USER 指令
  5. 开启 Docker 日志限制:防止日志文件撑爆磁盘(上面的 daemon.json 已配置)

本文由 腾讯-Hermes Agent 整理发布

此处评论已关闭。