### [VPS上Docker从零开始:安装、常用命令和Nginx+MySQL+Redis一条龙](https://www.jiyueip.com/article/13544) **Published:** 2026-07-30T09:24:49 **Author:** 斑斓助理 **Excerpt:** Docker 把应用和环境打包成容器,你在自己电脑上跑通的东西搬到VPS上也不会有”我电脑上能跑、服务器上报错”的问题。本文从零开始在VPS上装Docker,然后用三个容器跑起Nginx、MySQL和Redis——覆盖建站最常用的三个服务。 Docker 把应用和环境打包成容器,你在自己电脑上跑通的东西搬到VPS上也不会有”我电脑上能跑、服务器上报错”的问题。本文从零开始在VPS上装Docker,然后用三个容器跑起Nginx、MySQL和Redis——覆盖建站最常用的三个服务。 ## 第一步:安装Docker和Docker Compose 以下命令适用于Ubuntu/Debian系统: ``` # 卸载旧版本(如果有的话) apt remove docker docker-engine docker.io containerd runc -y # 安装依赖和Docker官方源 apt update && apt install ca-certificates curl -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list # 安装 apt update && apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y # 验证 docker --version docker run hello-world ``` hello-world 跑成功就说明Docker装好了。不需要在VPS上装Nginx、MySQL、PHP——都用容器跑,卸载时删容器就行,不会在系统里留一堆散落的配置文件和依赖。 雨云KVM构架的VPS跑Docker兼容性很好,优惠码 **admin01** 首月五折,入门配置1核1G就能跑两三个轻量容器。如果跑MySQL这类吃内存的服务,建议2G内存起步。 ## 第二步:Docker Compose 编排三个服务 Docker Compose 用一个YAML文件定义多个容器、网络和数据卷。创建一个 docker-compose.yml: ``` version: '3.8' services: nginx: image: nginx:alpine # alpine版体积小,只有几MB ports: - "80:80" # 宿主机80端口映射到容器80 - "443:443" volumes: - ./nginx/html:/usr/share/nginx/html # 网站文件 - ./nginx/conf:/etc/nginx/conf.d # Nginx配置 depends_on: - php # 等PHP启动了再启动Nginx restart: unless-stopped mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 换个强密码 MYSQL_DATABASE: mydb ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql # 数据持久化 restart: unless-stopped redis: image: redis:alpine ports: - "6379:6379" volumes: - ./redis/data:/data restart: unless-stopped ``` 关键理解volumes的作用:容器的文件系统是临时的——容器删了里面的数据就没了。volumes把容器里的目录映射到宿主机上的真实目录,数据不会丢。 启动全部服务: ``` docker compose up -d # -d 表示后台运行 # 查看运行状态 docker compose ps ``` ## 第三步:常用管理命令 ``` # 查看所有运行中的容器 docker ps # 查看某个容器的日志(实时) docker logs -f 容器名 # 进入容器内部调试 docker exec -it 容器名 sh # 重启单个容器 docker restart 容器名 # 更新镜像并重建容器 docker compose pull # 拉最新镜像 docker compose up -d # 重建 ``` 日常运维就这几个命令够用:ps看状态、logs查问题、restart重启、exec进去调试。 ## 第四步:Nginx 反向代理到 PHP 容器 如果要跑PHP网站(WordPress等),加一个PHP容器: ``` # 在docker-compose.yml的services里加 php: image: php:8.2-fpm-alpine volumes: - ./nginx/html:/var/www/html restart: unless-stopped ``` Nginx 的配置文件里把PHP请求转发给PHP容器: ``` # nginx/conf/default.conf server { listen 80; server_name _; root /usr/share/nginx/html; index index.php index.html; location ~ .php$ { fastcgi_pass php:9000; # php是docker-compose里定义的服务名 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; } } ``` Docker Compose 的网络里,每个服务名自动就是一个可解析的主机名——Nginx 容器里写 fastcgi\_pass php:9000,Docker 内部的DNS会自动解析到PHP容器的IP。不用记IP地址。 ## Docker和宝塔面板的区别 宝塔面板适合不想碰命令行的场景,一键装环境、可视化操作。Docker 适合想把环境配置写成文件、可复现的场景——换一台服务器,docker compose up -d 一条命令恢复整个环境。 推荐搭配:用宝塔管理服务器基础设置(防火墙、文件管理、定时任务),用Docker跑具体的服务(Nginx/MySQL/Redis/应用),两者不冲突。 ## 常见问题 ### 容器里的MySQL数据怎么备份? 两种方式:直接用宿主机的mysqldump连容器里的MySQL(docker exec mysql mysqldump -u root -p 数据库名 > backup.sql);或者定时把volumes目录(./mysql/data)打包。前者生成的SQL文件更通用。 ### Docker会不会很吃内存? Docker本身开销很小(几十MB)。吃内存的是你跑的容器——MySQL默认会吃掉宿主机一半内存作为缓冲池,需要限制:在docker-compose.yml的MySQL服务下加 deploy.resources.limits.memory: 512M。 ### 容器自动重启失败怎么办? docker logs 查容器启动日志,99%的情况是配置错误(端口冲突、挂载路径不存在、环境变量没设)。修好配置后 docker compose down && docker compose up -d 重建。 **Tags:** VPS性能, 云服务器, 建站教程, 网站运维 **Categories:** 行业洞察 ---