首选自定义 docker 网络或自定义 dns 服务器

首选自定义 docker 网络或自定义 dns 服务器

我想设置一个小型 Web 服务器,运行多个 Web 应用程序,例如 OpenProject 和 GitLab,以及用于用户管理的 OpenLDAP。为了封装单个应用程序,应该使用 docker。

现在我已经阅读了几种允许应用程序使用其主机名相互通信的方法(例如,Web 应用程序到 slapd)。大多数解决方案使用 DNS 服务器,要么在 docker 主机上运行像这儿或者在单独的docker容器中。

然而阅读Docker 用户指南,我还发现自定义 docker 网络也允许在网络中的容器之间进行名称解析。

当然,我更喜欢使用 docker 网络的第二种方法,因为它需要的工具和配置较少。但是,我现在有点困惑 docker 网络和自定义 DNS 服务器有什么不同。我是否忽略了任何细节?


在最后一段中添加了一些小的说明。

答案1

我目前正在做类似的事情。我使用 Docker 链接功能。通过将两个容器链接在一起,您可以设置一个 DN,链接的容器可通过该 DN 访问。我个人使用docker-compose获得比普通命令更好的配置。您甚至可以设置网络并让容器访问该网络。但每次访问都通过 docker 创建的 DN 进行,因为容器的 IP 可以在重新启动时更改。

作为示例,我将其用于 owncloud 和 nginx 作为 ssl 卸载代理。

version: '2'
services:
  nginx:
    container_name: nginx_proxy
    image: nginx
    links:
      - owncloud:owncloud
    networks:
      - owncloud_web
    ports:
      - 80:80
      - 443:443
    volumes:
      - ...

owncloud:
  container_name: owncloud
  links:
    - owncloud_db:postgresql
  networks:
    - gitlab_web
  volumes:
    - ...

owncloud_db:
  container_name: owncloud_db
  image: postgres:9.4
  networks:
    - owncloud_db
  volumes:
    - ...

networks:
  owncloud_web:
  owncloud_db:

这样,nginx 可以在 owncloud 下访问 owncloud,而 owncloud 可以在 postgresql 下访问其数据库。我设置了单独的网络,因此 nginx 无法直接访问数据库。

使用外部 DNS 服务器时,您必须知道容器的 IP 地址,这些地址在每次重启时都可能发生变化。甚至整个子网都可能发生变化。因此,您要么实施动态 DNS 系统,要么希望 IP 不会改变。

当使用 docker 内部时,您不必运行任何附加服务,也不必依赖 IP 地址。

相关内容