本地用docker开发的php 程序如何部署到阿里云的ecs上
将本地用 Docker 开发的 PHP 程序部署到阿里云 ECS,有多种方法,我会从简单到复杂为您详细介绍三种主流方案。

方案一:通过镜像仓库上传拉取(最推荐)
这种方式最符合 Docker 的理念,将应用及其环境整体打包成镜像进行分发。
步骤 1:在本地准备镜像
1、确保本地项目有 Dockerfile
一个典型的 PHP 项目 Dockerfile 示例:
# 使用官方 PHP 镜像带 Apache
FROM php:8.1-apache# 设置工作目录
WORKDIR /var/www/html# 安装必要的 PHP 扩展
RUN docker-php-ext-install mysqli pdo pdo_mysql# 将本地源代码复制到容器中
COPY . /var/www/html/# 如果需要,修改文件权限
RUN chown -R www-data:www-data /var/www/html2、构建本地镜像
cd /path/to/your/php-project
docker build -t my-php-app:latest .3、测试本地镜像
docker run -d -p 8080:80 --name my-php-app-local my-php-app:latest访问 http://localhost:8080 确认应用正常运行。
步骤 2:推送镜像到仓库
1、选择镜像仓库
- 阿里云容器镜像服务(ACR):与 ECS 同生态,推荐
- Docker Hub:全球通用
2、以 ACR 为例推送镜像
# 登录阿里云ACR(需要先开通容器镜像服务)
docker login --username=your_aliyun_username registry.cn-hangzhou.aliyuncs.com# 给本地镜像打上ACR的标签
docker tag my-php-app:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest步骤 3:在阿里云 ECS 上运行
1、登录 ECS 实例
ssh root@your-ecs-ip2、安装 Docker(如果尚未安装)
# CentOS 示例
yum install -y docker
systemctl start docker
systemctl enable docker3、从 ACR 拉取并运行镜像
# 登录ACR(同样需要先登录)
docker login --username=your_aliyun_username registry.cn-hangzhou.aliyuncs.com# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest# 运行容器
docker run -d \--name my-php-app \-p 80:80 \-v /path/on/ecs/uploads:/var/www/html/uploads \registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest优点:环境完全一致,部署快速,回滚方便(只需拉取旧版镜像)。
缺点:镜像文件较大,上传下载需要时间。
方案二:同步代码 + 在 ECS 上构建(灵活性强)
这种方式只上传代码和 Dockerfile,在服务器上执行构建。
步骤 1:准备项目文件
确保项目包含:
所有 PHP 源代码
Dockerfile.dockerignore(忽略 node_modules、.git 等不必要文件)如果需要,准备
docker-compose.yml
步骤 2:上传文件到 ECS
1、使用 rsync 同步(推荐)
# 在本地执行
rsync -avz --delete \-e "ssh -i /path/to/your/ecs-key.pem" \./your-php-project/ \root@your-ecs-ip:/home/php-project/2、或使用宝塔面板
在 ECS 上安装宝塔面板
通过宝塔的「文件」管理器直接上传项目 ZIP 包并解压
步骤 3:在 ECS 上构建和运行
1、SSH 登录 ECS
ssh -i /path/to/your/ecs-key.pem root@your-ecs-ip2、进入项目目录并构建
cd /home/php-project
docker build -t my-php-app-ecs .3、运行容器
docker run -d \--name my-php-app \-p 80:80 \-v $(pwd)/uploads:/var/www/html/uploads \my-php-app-ecs优点:传输文件小,适合频繁的代码更新。
缺点:ECS 需要安装构建环境,构建过程可能消耗资源。
方案三:使用 Docker Compose(适合复杂应用)
如果您的应用还包含 MySQL、Redis 等服务,这是最佳方案。
步骤 1:准备 docker-compose.yml
version: '3.8'services:app:build: .ports:- "80:80"volumes:- ./uploads:/var/www/html/uploads- ./logs:/var/log/apache2depends_on:- dbenvironment:- DB_HOST=db- DB_USER=app_userdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_DATABASE: app_dbMYSQL_USER: app_userMYSQL_PASSWORD: app_passwordvolumes:- db_data:/var/lib/mysqlredis:image: redis:alpinevolumes:db_data:步骤 2:上传文件到 ECS
同方案二,将整个项目目录(包含 docker-compose.yml)上传到 ECS。
步骤 3:在 ECS 上启动服务
# 在ECS上
cd /home/php-project# 安装 Docker Compose(如果未安装)
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose# 启动所有服务
docker-compose up -d部署后的重要操作
1、配置域名和 SSL
在阿里云控制台解析域名到 ECS IP
使用 Nginx 反代或直接在容器内配置 SSL
2、数据持久化
# 确保重要数据卷映射到主机目录
-v /ecs/data/uploads:/var/www/html/uploads
-v /ecs/data/mysql:/var/lib/mysql3、设置自动启动
# 使用 --restart=always
docker run -d --restart=always --name my-app ...# 或在 docker-compose.yml 中配置
restart: always4、日志管理
# 查看日志
docker logs my-php-app# 或配置日志驱动,将日志发送到阿里云日志服务方案选择建议
新手/简单项目:从方案二开始,最容易理解和调试
生产环境/微服务:使用方案一,最规范,易于CI/CD集成
多服务应用:使用方案三,管理依赖最方便
无论选择哪种方案,核心都是确保生产环境与本地开发环境的 Docker 配置保持一致。
