侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

在Docker Compose中为Laravel应用程序简化主机名

Laravel  /  管理员 发布于 3年前   772

在使用 Docker 进行开发时,您可能会遇到奇怪的情况,特别是 docker compose,以及网络的完成方式。

我将 WSL2 与 Docker 桌面一起使用,让我的生活变得轻松,

最近不得不找出主机名的别名,以便容器可以在没有 IP 地址或服务名称的情况下相互引用,

即在使用 http 客户端向服务 a 发出请求时服务 B.

希望这会为人们提供一些启示,或者只是让 docker 更容易使用,这是一项伟大的开发技术。

ps: 
这不适用于生产或暂存用途。
仅用于开发目的


配置

我假设您有 3 个 Laravel 应用程序,并且 NGINX 是您的代理服务器(网络服务器)。

这意味着我们将使用 PHP-FPM,因为对您的服务的所有请求都是从 NGINX 传递到给定应用程序的 PHP-FPM 服务的代理。

 FPM 然后运行实际代码并将响应返回给 NGINX。


我们将添加一个假定的数据库服务,以便我们的 docker-compose 文件看起来完整。

我们将详细介绍撰写文件的每个部分,重点关注网络部分。


让我们假设我们有 3 个 Laravel 应用程序:

management/payroll/marketing 这三个。

services:
  management:
    build:
      context: .
    container_name: management
    image: laravel-example/management
    restart: unless-stopped
    tty: true
    working_dir: /var/www/management
    volumes:
      - ./:/var/www/management
    networks:
      - laravel-example
  payroll:
    build:
      context: ../payroll
    container_name: payroll
    image: laravel-example/payroll
    restart: unless-stopped
    tty: true
    working_dir: /var/www/payroll
    volumes:
      - ../payroll:/var/www/payroll
    networks:
      - laravel-example
  marketing:
    build:
      context: ../marketing
    container_name: marketing
    image: laravel-example/marketing
    restart: unless-stopped
    tty: true
    working_dir: /var/www/marketing
    volumes:
      - ../marketing:/var/www/marketing
    networks:
      - laravel-example
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - ../payroll:/var/www/payroll
      - ../marketing:/var/www/marketing
      - ./:/var/www/management
      - ./build/dev/nginx/conf:/etc/nginx/conf.d
      - ./build/dev/nginx/certs/:/etc/nginx/ssl
    networks:
      laravel-example:
        aliases:
          - payroll.bigcorp.test
          - marketing.bigcorp.test
          - management.bigcorp.test
    depends_on:
      - marketing
  mariadb:
    image: mariadb:10.2
    container_name: mariadb
    ports:
      - 33065:3306
    environment:
      MYSQL_ROOT_PASSWORD: "password"
      MYSQL_DATABASE: "your_db"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "password"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - laravel-mariadb:/var/lib/mysql
    networks:
      - laravel-example
    restart: on-failure
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
networks:
  laravel-example:
    driver: bridge
    external: false
    name: laravel-example
volumes:
  laravel-mariadb:
    driver: local

yaml 文件可能看起来很大,但实际上很容易按服务分解服务并了解每个部分的作用。

我们对这篇文章的主要关注是了解主机名别名。

通常 docker 会根据其内部网络为服务分配一个 ip,因此在给定的构建或运行中,给定的服务永远不会有相同的 ip 地址。

服务可以通过名称相互“交谈”,因为 docker 会将服务名称解析为 IP 地址。

出现这种情况的地方是一个服务在 docker 网络中向另一个服务发出 http 请求。

调用将失败,因为主机名无法解析,当然没有 DNS 服务器。

为了解决这个问题,我们需要看两件事:

我们在撰写文件中的网络键说“让我创建一个名为 laravel-example 的网络,并使用网桥驱动程序,这不是外部(已经存在的网络)。


我们的每项服务都建立在这个网络中。

像 DNS 一样在 docker 中解析主机名的关键是我们 NGINX 服务中的网络键

networks:
      laravel-example:
        aliases:
          - payroll.bigcorp.test
          - marketing.bigcorp.test
          - management.bigcorp.test

基本上我们只是说,“将这些主机名中的任何一个解析为 NGINX 服务”。

这当然有效,因为对 NGINX 的所有请求都会传递到代理到 PHP-FPM 服务的服务器块。

我们可以在后面的文章中看看它是如何工作的。

希望这能以实用的方式为开发目的阐明 dockers 网络。


转:

https://dev.to/localpathcomp/simplifying-hostnames-in-docker-compose-for-laravel-apps-4f6

  • 上一条:
    如何在PhpStorm中启用实时合并冲突检测
    下一条:
    百度小程序使用在线Web IDE工具简单的布局及列表循环展示数据功能
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客