本文介绍laradock的安装,以及使用laradock配置laravel开发环境的整体流程,以及安装过程中遇到的问题及其解决方式。laradock非常适合想快速搭建开发环境,把代码跑起来看效果的场景。不需要本地机器再安装繁复的基础环境,有时候搭建环境就耗费了太多的精力。laradock可以根据需要配置不同软件版本,不同中间件,不同数据库等等,来构建自定义的开发环境。可以说laradocklaravel开发者非常不错的一个选择。

安装

浏览到要开发的目录下,执行:

1
git clone https://github.com/laradock/laradock.git

在与laradock目录同级的目录下,创建目录,用来映射docker容器中的开发代码

1
2
3
4
mkdir www

# laradock
# www

进入到laradock目录下,拷贝出laradock的配置文件

1
cp .env.example .env

该文件中列出了所有可以安装的服务的配置项目,可以根据自己的需要进行对应的配置。 我们可以先修改下该配置文件中的nginx配置,因为不想占用本地的80、443端口,所以可以修改对应的配置项目

1
2
NGINX_HOST_HTTP_PORT=8000
NGINX_HOST_HTTPS_PORT=4430

另外,在laradock/nginx/sites目录下放的是开发容器的配置文件,里面有一个default.conf文件和其他类型的配置文件的例子。我们可以直接使用default.conf中的配置,也可以拷贝出一份laravel对应的配置文件进行修改。

简单的配置完毕后,可以直接启动nginxmysql容器了。这里是用docker-compose启动的容器,只用该命令时,当前目录中必须存在docker-compose.yml配置文件,否则会报错。根据docker-compose.yml中的设定,启动上面两个容器后,剩下的容器会自动创建并启动。

1
docker-compose up -d nginx mysql

第一次安装会等待较长时间,取决于拉取镜像的速度。中间过程可能会报错,大致分为三种错误:

  • 镜像拉取失败,这时我们可以更换为国内的镜像源(修改docker服务的配置文件):
1
2
3
4
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]

或者构建过程中报错,这些大部分是因为拉取不到对应的内容从而引起的错误,我们可以在网络环境较好的时候执行构建操作。

  • 第二个问题是,在构建过程中出现如下错误提示:
1
 ERROR [internal] load metadata for docker.io/xxxxx/xxxx

这种错误的解决方式是,在docker服务的配置文件中加入如下内容:

1
"insecure-registries": ["docker.io"],

重启docker服务即可。

  • 第三个问题是DNS污染,我们从下面的网站读取数据时,会提示错误:
1
# Failed to connect to raw.githubusercontent.com port 443: Connection refused

解决方式是,先去 ipaddress 查找上面网址对应的真正的IP地址。然后修改我们本机的配置文件:/etc/hosts,在里面添加真实IP地址和网址的映射关系即可。

现在假设我们已经启动镜像成功,我们执行docker-compose ps 应该可以看到下面几个镜像已经在执行了:

1
2
3
4
5
6
7
❯ docker-compose ps
NAME                          IMAGE                COMMAND                  SERVICE             CREATED             STATUS              PORTS
laradock-docker-in-docker-1   docker:20.10-dind    "dockerd-entrypoint.…"   docker-in-docker    4 hours ago         Up 4 hours          2375-2376/tcp
laradock-mysql-1              laradock-mysql       "docker-entrypoint.s…"   mysql               4 hours ago         Up 4 hours          0.0.0.0:3306->3306/tcp, 33060/tcp
laradock-nginx-1              laradock-nginx       "/docker-entrypoint.…"   nginx               4 hours ago         Up 48 minutes       0.0.0.0:81->81/tcp, 0.0.0.0:8000->80/tcp, 0.0.0.0:4430->443/tcp
laradock-php-fpm-1            laradock-php-fpm     "docker-php-entrypoi…"   php-fpm             4 hours ago         Up 4 hours          9000/tcp
laradock-workspace-1          laradock-workspace   "/sbin/my_init"          workspace           4 hours ago         Up 4 hours          0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:5173->5173/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp

下面开始安装我们的laravel框架代码。首先进入workspace 容器:

1
2
3
docker-compose exec workspace bash
# 该命令是以root进入容器的,我们开发应该使用laradock身份(PUID/PGID都是1000,与env一致)进入容器:
docker-compose exec --user=laradock workspace bash

进入容器后的目录就是env文件中APP_CODE_PATH_HOST 指定的目录的映射目录,默认是../,因为我们是在laradock 的同级目录建的映射目录var/www 所以我修改了APP_CODE_PATH_HOST../www

执行如下命令安装laravel

1
2
composer create-project laravel/laravel --prefer-dist
# --prefer-dist 是从服务器取代码,不加是从github上直接拉取,会快一点,但是可能有版本滞后

安装完毕后,修改laravel目录下的.env文件,将其中的数据库配置,按照laradockenv中的设定进行配置,DB_HOST一定设定为mysql,否则找不到数据库:

DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret

至此,laradock配置的laravel开发环境就准备就绪,我们打开浏览器,访问:http://localhost:8000就可以看到laravel的欢迎页面了。

这里需要特别说明一下,我们通过http://localhost:8000访问nginx服务器,它里面项目代码的配置,映射的是我们本机(宿主机)的www目录,而这个目录又是开发环境容器的代码映射路径。因此,我们在开发容器开发完毕的代码,直接就可以通过http://localhost:8000进行访问确认。