Laravel构建Docker Laravel Dockerfile
在现代Web开发中,使用Docker来容器化应用程序已经成为一种常见的做法。Laravel是一个流行的PHP框架,结合Docker可以极大地简化开发和部署流程。本文将介绍如何使用Docker构建一个Laravel应用,并提供详细的Dockerfile示例。
解决方案概述
本文将通过以下步骤解决如何使用Docker构建Laravel应用的问题:
- 创建一个新的Laravel项目。
- 编写Dockerfile以构建Laravel应用的镜像。
- 使用Docker Compose配置多个服务(如数据库和缓存)。
- 构建并运行Docker容器。
创建Laravel项目
首先,我们需要创建一个新的Laravel项目。如果你还没有安装Composer,可以参考官方文档进行安装。然后,使用以下命令创建一个新的Laravel项目:
bash
composer create-project --prefer-dist laravel/laravel my-laravel-app
进入项目目录:
bash
cd my-laravel-app
编写Dockerfile
接下来,我们需要编写一个Dockerfile来定义如何构建Laravel应用的镜像。在项目根目录下创建一个名为Dockerfile
的文件,并添加以下内容:
dockerfile</p>
<h1>使用官方的PHP基础镜像</h1>
<p>FROM php:8.1-fpm</p>
<h1>设置工作目录</h1>
<p>WORKDIR /var/www/html</p>
<h1>安装系统依赖</h1>
<p>RUN apt-get update && apt-get install -y
build-essential
libpng-dev
libjpeg62-turbo-dev
libfreetype6-dev
locales
zip
jpegoptim optipng pngquant gifsicle
vim
unzip
git
curl
libzip-dev
libonig-dev
libxml2-dev
libcurl4-openssl-dev</p>
<h1>清理缓存</h1>
<p>RUN apt-get clean && rm -rf /var/lib/apt/lists/*</p>
<h1>安装PHP扩展</h1>
<p>RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd</p>
<h1>安装 Composer</h1>
<p>RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer</p>
<h1>复制现有应用代码到容器中</h1>
<p>COPY . .</p>
<h1>安装应用依赖</h1>
<p>RUN composer install --optimize-autoloader --no-dev</p>
<h1>设置权限</h1>
<p>RUN chown -R www-data:www-data /var/www/html</p>
<h1>暴露端口</h1>
<p>EXPOSE 9000</p>
<h1>启动 PHP-FPM 服务器</h1>
<p>CMD ["php-fpm"]
使用Docker Compose配置多个服务
为了更方便地管理多个服务(如数据库和缓存),我们可以使用Docker Compose。在项目根目录下创建一个名为docker-compose.yml
的文件,并添加以下内容:
yaml
version: '3.8'</p>
<p>services:
web:
build:
context: .
dockerfile: Dockerfile
container<em>name: laravel</em>app
volumes:
- .:/var/www/html
networks:
- laravel<em>network
depends</em>on:
- db
- redis</p>
<p>db:
image: mysql:5.7
container<em>name: laravel</em>db
environment:
MYSQL<em>ROOT</em>PASSWORD: root
MYSQL<em>DATABASE: laravel
MYSQL</em>USER: laravel
MYSQL<em>PASSWORD: password
volumes:
- db</em>data:/var/lib/mysql
networks:
- laravel_network</p>
<p>redis:
image: redis:alpine
container<em>name: laravel</em>redis
networks:
- laravel_network</p>
<p>nginx:
image: nginx:alpine
container<em>name: laravel</em>nginx
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends<em>on:
- web
networks:
- laravel</em>network</p>
<p>networks:
laravel_network:
driver: bridge</p>
<p>volumes:
db_data:
配置Nginx
为了使Nginx能够正确地代理请求到PHP-FPM,我们需要创建一个Nginx配置文件。在项目根目录下创建一个名为nginx
的目录,并在该目录下创建一个名为default.conf
的文件,内容如下:
nginx
server {
listen 80;
server_name localhost;
root /var/www/html/public;</p>
<pre><code>add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ .php$ {
fastcgi_pass web:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.(?!well-known).* {
deny all;
}
}
构建并运行Docker容器
最后,我们可以通过以下命令构建并运行Docker容器:
bash
docker-compose up -d --build
这将启动所有配置的服务,并在本地的8080
端口上运行Laravel应用。你可以通过访问http://localhost:8080
来查看应用。
总结
通过以上步骤,我们成功地使用Docker构建了一个Laravel应用,并配置了多个服务。这种方式不仅简化了开发环境的搭建,还使得应用的部署更加方便和可靠。希望本文对你有所帮助!
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/68499.html<