zenith-docs 1.0.0 Help

使用 Docker

这篇文档描述了如何使用 Docker 初始化 Laravel 的开发环境。这是一种简单、现代的方式,希望大家都能够采用这种方式。这种方式统一了线上线下环境,有效避免了因为环境的不一致导致的问题。

前提条件

需要说明的说,这不是一篇讲解 Docker 的文章,我们假设读者已经掌握了 Docker、Docker Composer 相关的知识,并且已经完成了本地 Docker 的安装。

另外,这篇文档使用了当前比较新的技术版本,Laravel 采用 10 的版本、PHP 使用的是 8.2 版本。

初始化项目

首先,我们需要初始化一个项目,将 Laravel 的框架代码从远程仓库下载到本地,并框架所需的依赖。这需要使用 Composer,这里使用 Docker 来完成:

docker run -v .:/app/ composer:latest create-project laravel/laravel app

编写 Dockerfile

接着,我们需要编写一个 Dockerfile 文件,在项目的根目录下,内容如下:

FROM composer:latest AS composer WORKDIR /app COPY ./composer.json ./composer.lock ./ RUN composer install --no-dev --no-scripts FROM php:8.2-fpm RUN apt-get update && apt-get install -y libpng-dev libonig-dev libxml2-dev && \ docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd && \ apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /var/www COPY . /var/www COPY --from=composer /app/vendor/ /var/www/vendor/ EXPOSE 9000 CMD ["php-fpm"]

这个 Dockerfile 分为两个阶段。首先是 composer 阶段,从 Composer 镜像开始,拷贝 composer.json 和 composer.lock 文件,然后安装依赖。然后是 php-fpm 阶段,从 PHP 镜像开始,安装必要的 PHP 扩展,并从 composer 阶段拷贝已经安装好的依赖进来。

这样做的好处是,最后的镜像将不会包含用于安装依赖的额外文件和工具,只包含运行应用所需的最小集,因此可以减小最后镜像的体积。

编写 docker-compose.yml

接着,我们在根目录下编写名为 docker-compose.yml 的容器编排文件:

version: '3.1' services: php: build: context: . dockerfile: Dockerfile volumes: - ./:/var/www ports: - "9000:9000" mysql: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password --secure-file-priv="" volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: app ports: - "33060:3306" nginx: image: nginx:latest ports: - "8080:80" volumes: - ./:/var/www - ./nginx.conf:/etc/nginx/conf.d/default.conf volumes: db_data:

当中,我们启动了三个服务,分别是 phpnginx 以及 mysql ,这样我们一个基本的应用就完成了。

启动服务

最后,我们可以启动服务了,命令如下:

$ docker-compose up

如果没有异常的话,当我们访问http://localhost:8080 会出现如下界面:

image

总结

这篇文档我们介绍了如何使用 docker 以及 docker-compose 来快速启动 Laravel 项目的开发环境。Laravel 官方开发了 Laravel Herd ,用来管理本地开发环境。目前只支持 MacOS, Windows 的支持需要等到 2024 年 3 月底。到时候可以再写一篇来讲讲。

Last modified: 04 August 2024