记一次用Docker为Laravel5.4部署本地开发环境:php7.1+redis+mysql+nginx
- 首先我们在官方镜像
php:7.1-fpm-alpine
的基础上安装pdo_mysql和redis扩展,以及composer# 使用官方的 PHP 7.1 FPM Alpine 镜像作为基础镜像 FROM php:7.1-fpm-alpine# 更新软件包索引 RUN apk update# 安装必要的依赖包 RUN apk add --no-cache \curl \ca-certificates \unzip \libzip-dev \icu-dev \zlib-dev \tcl-dev \autoconf \g++ \libc-dev \make \libxml2-dev \re2cRUN docker-php-ext-install pdo_mysql \&& docker-php-ext-enable pdo_mysql# 安装redis扩展 RUN pecl install https://pecl.php.net/get/redis-4.3.0.tgzRUN echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini# 安装 Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \&& chmod +x /usr/local/bin/composer# 设置工作目录 WORKDIR /var/www/html# 暴露 PHP-FPM 默认监听的端口 EXPOSE 9000# 启动 PHP-FPM 服务 CMD ["php-fpm"]
运行docker build -t my-php-fpm-composer .
构建镜像。
-
编写
docker-compose.yml
version: '3.8'services:web:image: my-php-fpm-composervolumes:- .:/var/www/htmldepends_on:- db- composerenvironment:- DB_CONNECTION=mysql- DB_HOST=db- DB_PORT=3306- DB_DATABASE=homestead- DB_USERNAME=homestead- DB_PASSWORD=secretnginx:image: nginx:alpineports:- "80:80"volumes:- .:/var/www/html- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf- ./docker/snippets:/etc/nginx/snippetsdepends_on:- webdb:image: mysql:5.7command: --default-authentication-plugin=mysql_native_passwordenvironment:MYSQL_ROOT_PASSWORD: secretMYSQL_DATABASE: homesteadMYSQL_USER: homesteadMYSQL_PASSWORD: secretvolumes:- dbdata:/var/lib/mysqlredis:image: redis:alpinevolumes:- redisdata:/datacomposer:image: composer:latestvolumes:- .:/var/www/htmlworking_dir: /var/www/htmlcommand: install --ignore-platform-reqs --no-interaction --optimize-autoloadervolumes:dbdata:redisdata:
-
按
docker-compose.yml
的目录放置配置文件-
nginx.conf
server {listen 80;root /var/www/html/public;index index.php index.html index.htm;server_name localhost;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass web:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}location ~ /\.ht {deny all;}# 确保这个位置允许访问location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {add_header Cache-Control "public, max-age=86400";expires 30d;log_not_found off;} }
-
fastcgi-php.conf
# /etc/nginx/snippets/fastcgi-php.conf fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param QUERY_STRING $query_string; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
-
-
最后我们运行
docker-compose up
将容器运行起来 -
再进入php的容器
docker-compose exec web sh
,运行composer install
完成依赖包的安装。🎉到这就结束了,去你的项目中愉快玩耍吧。