Symfony是一个流行的PHP框架,使用Docker可以快速搭建开发环境。以下是使用Docker一键部署Symfony应用的详细指南。
docker run --rm -v $(pwd):/app -w /app composer create-project symfony/skeleton my-project
cd my-project
创建docker-compose.yaml
文件:
version: '3'
services:
app:
image: symfonycorp/cli
volumes:
- .:/app
working_dir: /app
ports:
- "8000:8000"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: db
depends_on:
- db
volumes:
mysql_data:
docker-compose up -d
docker-compose exec app symfony server:start -d
现在可以通过 http://localhost:8000 访问Symfony应用。
my-project/
├── docker/
│ ├── nginx/
│ │ └── default.conf
│ ├── php/
│ │ └── Dockerfile
├── docker-compose.yaml
└── src/ (Symfony项目文件)
docker/php/Dockerfile
:
FROM php:8.1-fpm
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www
docker/nginx/default.conf
:
server {
listen 80;
server_name localhost;
root /var/www/public;
location / {
try_files $uri /index.php$is_uri$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass app:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
version: '3'
services:
app:
build:
context: .
dockerfile: docker/php/Dockerfile
volumes:
- ./:/var/www
depends_on:
- db
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: db
depends_on:
- db
volumes:
mysql_data:
docker-compose up -d --build
docker-compose exec app composer create-project symfony/skeleton .
编辑.env
文件:
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=5.7"
权限问题:
docker-compose exec app chown -R www-data:www-data var
缓存清理:
docker-compose exec app php bin/console cache:clear
安装额外扩展: 在Dockerfile中添加:
RUN docker-php-ext-install pdo pdo_mysql
端口冲突:
修改docker-compose.yaml
中的端口映射,如将8000:80
改为8001:80
docker-compose up -d
docker-compose down
docker-compose logs -f
docker-compose exec app php bin/console [command]
docker-compose exec app composer require [package]
通过以上步骤,您已经成功使用Docker部署了Symfony应用,可以开始开发了!