Docker 部署 Laravel 项目实践

简介

Docker 是一种虚拟化技术,可以轻松构建、打包、分享应用程序和服务。本文将介绍如何使用 Docker 部署 Laravel 项目,使你的应用程序更加便携、更容易维护。

所需工具

在开始之前,需要准备以下工具:

  1. Docker
  2. Docker Compose
  3. 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-devlibpq-devlibzip-devzipunzip 等库。然后运行 docker-php-ext-install 命令来安装 PHP 的扩展包,包括 pdo_pgsqlpdo_mysqlzip。最后,我们启用了 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 文件包含了两个服务:

  1. web:这是我们刚刚创建的 Laravel 应用程序容器。定义了上面创建的 Dockerfile,并暴露了端口 8080
  2. db:这是我们将要使用的 PostgreSQL 数据库容器。使用官方 postgres:12 镜像,并设置了一些环境变量。

我们在 web 服务中使用了 build 命令,这将会基于当前目录中的 Dockerfile 构建镜像。web 服务还挂载了本地目录中的代码到容器的 /var/www/html 目录中。

最后,使用 depends_on 命令来指定 web 服务依赖于 db 服务,以确保使用时数据库容器已经启动。

项目配置

在 Laravel 项目中,需要更新一些配置文件以适应 Docker 环境。

首先,在 .env 文件中更新数据库连接配置:

这里将 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


纠错反馈