laradock开发环境搭建笔记

主机环境:mac os

目标:搭建laravel框架运行环境。需要启用的服务有:workspace、php-fpm、php-worker、nginx、mysql、redis、rabbitmq。

步骤:

1、主机安装Docker Desktop。官网下载安装即可。

2、给Docker Desktop配置代理以及国内的镜像源。国外镜像下载很慢、而且在build镜像的时候,部分外网的源代码由于网络环境或GFW导致无法下载,创建失败。所有需要有一个可以连接到外网的代理服务器。

   b、修改 Preferences --> Docker Engine 配置。附上官方文档地址:https://docs.docker.com/network/proxy/

{
  "debug": true,
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "experimental": false,
  "proxies": {
    "default": {
      "httpProxy": "http://192.168.1.128:10809",
      "httpsProxy": "http://192.168.1.128:10809",
      "noProxy": ""
    }
  }
}

   b、Preferences --> Resources --> PROXIES --> Manual proxy configuration 开关打开。Web Server (HTTP) 以及 Secure Web Server(HTTPS) 填入你的代理服务器地址和端口。我的代理服务器是和mac book连接到同一个路由器的手机,手机安装了 yar2v(倒过来)

  3、rabbitmq 启动/重启失败。

       a. 报错:docker chown: /var/lib/rabbitmq/.erlang.cookie: I/O error。执行以下命令:`chmod 770 ~/.laradock/data/rabbitmq/.erlang.cookie`。

       b. windows 环境的docker可能报错:Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only   解决办法:docker-compose.yml文件中的rabbitmq配置修改一下

    volumes:
        - ${DATA_PATH_HOST}/rabbitmq:/var/lib/rabbitmq/mnesia

      4、项目中的数据库、redis的配置使用服务的网络别名。laravel项目中的.env 配置数据库。`DB_HOST=mysql`, `REDIS_HOST=redis`,其实就是使用容器的网络别名。不清楚的可看官方文档关于docker网络配置。简单总结就是:让所有容器都连接到你自己创建的网络(user definded network),如果连接docker创建的默认网络是无法使用网络别名相互访问的,一个容器可以连接到多个网络,并且一个容器在一个网络中可以有多个网络别名。

具体怎么配置,参考下面的 nginx的docker-compose配置(基于laradock的配置):

 a、nginx容器连接到两个网络backend和frontend。其中nginx容器在backend网络配置了3个别名,这里我给每个项目配置一个网络别名,其他容器(php-fpm、workspace等)都可以通过nginx的网络别名正常访问各个项目了。另外一个方法是给其他容器配置 extra_hosts,但是相对比较麻烦。

### NGINX Server #########################################
    nginx:
      build:
        context: ./nginx
        args:
          - CHANGE_SOURCE=${CHANGE_SOURCE}
          - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
          - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
          - http_proxy
          - https_proxy
          - no_proxy
      volumes:
        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
        - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
        - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
        - ${NGINX_SSL_PATH}:/etc/nginx/ssl
      ports:
        - "${NGINX_HOST_HTTP_PORT}:80"
        - "${NGINX_HOST_HTTPS_PORT}:443"
        - "${VARNISH_BACKEND_PORT}:81"
      depends_on:
        - php-fpm
      networks:
         backend:
           aliases:
              - a.service.test
              - b.service.test
              - c.service.test
         frontend:

  

 

posted @ 2020-10-07 00:43  胡国洪  阅读(421)  评论(0编辑  收藏  举报