使用构建好的 Docker 镜像来搭建 Laravel Sail 开发环境,解决 Laravel Sail 镜像构建失败的问题
背景
最近有很多小伙伴给我留言,说按照教程《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程
》搭建 Laravel Sail 开发环境时总是构建镜像失败。其实构建镜像失败的主要原因就是国内的网络问题,这给刚学习 Laravel Sail 开发环境搭建的小白带来了“巨大的”挑战,所以我将本地构建好的 Sail 镜像共享到了百度网盘上,大家直接从百度网盘下载构建好的 Laravel Sail 镜像导入 Docker Desktop 里面,然后从导入的镜像来构建开发环境就可以了。当然,为了下载速度快一些,你可能要给百度网盘充点钱钱。
镜像地址
链接:pan.baidu.com/s/1FKXRZWZYhPjnY2mwX...
提取码:b7br
镜像列表:
- sail-7.4.tar (适用于基于 php7.4 开发的项目)
- sail-8.0.tar (适用于基于 php8.0 开发的项目)
- sail-8.0-octane.tar (适用于基于 php8.0 开发且由 laravel octane 驱动的项目)
- sail-8.1 (适用于基于php8.1开发的项目)
- mysql-8.0
- redis
基础环境准备
- 开启 wsl2
- 安装 Ubuntu 子系统
- 安装 Docker Desktop 并让 Docker Desktop 基于 wsl2 来运行
搭建步骤
安装 Laravel Sail
请参照《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程》
中 发布 Dockerfile 以便定制
这一步骤之前的步骤。因为我们使用从百度网盘下载的镜像来构建开发环境,所以不需要我们重新定制 Dockerfile 来构建镜像了。
下载并导入 Laravel Sail 镜像
从上面我分享的镜像中,选择你需要的镜像下载到本地电脑。这里假设我需要的是 sail-8.0.tar,我的镜像下载到了/mnt/c/sail-8.0.tar
这个路径里面。
首先导入镜像:
$ docker load < /mnt/c/sail-8.0.tar
查看导入的镜像:
$ docker image ls
运行结果如下:
给镜像命名:
由于我导出镜像的时候用的镜像ID,所以导入镜像的 REPOSITORY 和 TAG 都为空值,这是我当时的失误,所以加上这一步。
$ docker tag e4bd20deb92f sail-8.0/app:latest
运行 docker image ls
就可以看到导入的镜像了。
编辑 docker-compose.yml 文件,编排镜像。
将你的服务配置中的build
选项删除,因为我们已经导入了镜像,不需要构建了。编辑后的配置文件如下:
# For more information: https://learnku.com/docs/laravel/sail
version: '3'
services:
your-service.test:
image: sail-8.0/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: ["CMD", "redis-cli", "ping"]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailredis:
driver: local
启动服务
./vendor/bin/sail up
后续步骤
后续步骤请查看《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程》 中构建镜像并启动容器
及后续章节。
其他
- 将新项目接入Laravel Sail 创建好的MySQL、Redis容器,并实现自己的 sail 脚本与容器交互
- Laravel 中文文档之 Sail 开发环境
- 搭建 Laravel Sail 开发环境 - Windows
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: