简介
Docker 是一种虚拟化技术,可以轻松构建、打包、分享应用程序和服务。本文将介绍如何使用 Docker 部署 Laravel 项目,使你的应用程序更加便携、更容易维护。
所需工具
在开始之前,需要准备以下工具:
- Docker
- Docker Compose
- Laravel 项目代码
Docker 镜像
Docker 镜像是一种轻量级、独立、可执行的软件包,其中包含运行容器所需的全部内容,包括代码、库、环境变量和配置文件。你可以将 Docker 镜像视为一种软件模板,而容器则是运行该模板的实例。
我们将使用官方提供的 PHP 镜像,它已经包含了 Apache 和 PHP。我们需要扩展这个镜像来支持 Laravel 应用程序的运行。
首先,创建一个名为 Dockerfile
的文件,并添加以下内容:
FROM php:7.4-apache RUN apt-get update && apt-get install -y \ libmcrypt-dev \ libpq-dev \ libzip-dev \ zip \ unzip \ && docker-php-ext-install pdo_pgsql pdo_mysql zip \ && a2enmod rewrite COPY . /var/www/html/
这个 Dockerfile 首先使用 FROM php:7.4-apache
命令来基于 PHP 7.4 和 Apache 镜像构建自定义镜像。
然后,我们使用 RUN
命令来安装需要的扩展库和软件包,下载并安装了 libmcrypt-dev
、libpq-dev
、libzip-dev
、zip
和 unzip
等库。然后运行 docker-php-ext-install
命令来安装 PHP 的扩展包,包括 pdo_pgsql
、pdo_mysql
和 zip
。最后,我们启用了 rewrite
模块。
最后,将 Laravel 项目代码复制到容器的 /var/www/html/
目录中。
Docker Compose
Docker Compose 是 Docker 官方推出的工具,它使用 YAML 文件来定义和配置多个容器的运行环境。可以轻松地在不同的服务器或本地主机之间部署应用程序和服务。
我们将使用 Docker Compose 来定义和运行两个容器,一个是我们刚刚创建的 Laravel 应用程序容器,另一个则是 PostgreSQL 数据库容器。
首先,创建名为 docker-compose.yml
的文件,并添加以下内容:
version: '3' services: web: build: . ports: - "8080:80" volumes: - .:/var/www/html depends_on: - db db: image: postgres:12 environment: POSTGRES_USER: dbuser POSTGRES_PASSWORD: dbpass POSTGRES_DB: dbname
这个 YAML 文件包含了两个服务:
web
:这是我们刚刚创建的 Laravel 应用程序容器。定义了上面创建的 Dockerfile,并暴露了端口8080
。db
:这是我们将要使用的 PostgreSQL 数据库容器。使用官方postgres:12
镜像,并设置了一些环境变量。
我们在 web
服务中使用了 build
命令,这将会基于当前目录中的 Dockerfile
构建镜像。web
服务还挂载了本地目录中的代码到容器的 /var/www/html
目录中。
最后,使用 depends_on
命令来指定 web
服务依赖于 db
服务,以确保使用时数据库容器已经启动。
项目配置
在 Laravel 项目中,需要更新一些配置文件以适应 Docker 环境。
首先,在 .env
文件中更新数据库连接配置:
DB_CONNECTION=pgsql DB_HOST=db DB_PORT=5432 DB_DATABASE=dbname DB_USERNAME=dbuser DB_PASSWORD=dbpass
这里将 DB_HOST
设置成了 db
,这对应了我们在 docker-compose.yml
中定义的 PostgreSQL 数据库服务。
接下来,在 config/cache.php
文件中更新 Redis 的连接:
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'cluster' => env('REDIS_CLUSTER', false), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => 'redis', 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DB', 0), ], ],
这里将 host
设置成了 redis
,这对应了我们将要在 Docker Compose 中定义的 Redis 服务。
最后,在 config/session.php
文件中更新 Redis 的连接:
'driver' => env('SESSION_DRIVER', 'file'), 'connection' => env('SESSION_CONNECTION', 'redis'),
这里将 connection
设置成了 redis
。
运行 Docker Compose
现在,我们已经完成了各项配置,可以运行 Docker Compose 了。
首先,使用 docker-compose build
命令来构建镜像:
docker-compose build
接着,使用 docker-compose up
命令来启动容器:
docker-compose up
现在,你可以在浏览器中访问 http://localhost:8080
来访问你的 Laravel 应用程序。
总结
本文介绍了如何使用 Docker 部署 Laravel 项目,通过 Docker 和 Docker Compose 可以轻松实现多容器应用程序的运行和部署。这样可以大大降低开发者的部署难度,使得应用程序更加稳定、便携和易于维护。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65aa61f0add4f0e0ff3fdd2c