首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker:将结构拆分为有用的网络

docker:将结构拆分为有用的网络
EN

Stack Overflow用户
提问于 2018-11-13 17:00:31
回答 2查看 723关注 0票数 4

我不太确定码头网络的正确使用。

我正在运行一个(单一托管的)反向代理和应用程序本身的容器,但我希望设置像proxyfrontendbackend这样的网络。最后一个项目是project1,假设最后可能有多个项目。但我甚至不确定,这个结构是否应该这样做。我认为后端应该只能访问前端,而前端应该可以访问代理。

因此,这就是我目前的工作结构,只有一个网络(桥)--这是没有意义的:

  1. 反向代理(网络:反向代理):
    • jwilder/nginx代理
    • jrcs/letsencrypt nginx-代理伙伴

  1. 数据库
    • 蒙戈:3.6.2

  1. 项目1
    • 一个/前端
    • 一个/后端
    • 两个/正面
    • 二/后端

所以我的第一个船坞组合看起来是这样的:

代码语言:javascript
复制
version: '3.5'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    networks:
      - reverse-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/docker/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
      - html:/usr/share/nginx/html
      - /opt/nginx/certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nginx-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-letsencrypt
    networks:
      - reverse-proxy
    depends_on:
      - nginx-proxy
    volumes:
      - /var/docker/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
      - html:/usr/share/nginx/html
      - /opt/nginx/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      NGINX_PROXY_CONTAINER: "nginx-proxy"

  mongodb:
    container_name: mongodb
    image: mongo:3.6.2
    networks:
      - reverse-proxy

volumes:
  html:

networks:
  reverse-proxy:
    external:
      name: reverse-proxy

这意味着我之前必须创建反向代理。我不确定到目前为止这是否正确。

项目应用程序--前端容器和后端容器--是由我的CI使用docker命令(不是docker组合)创建的:

代码语言:javascript
复制
docker run
  --name project1-one-frontend
  --network reverse-proxy
  --detach
  -e VIRTUAL_HOST=project1.my-server.com
  -e LETSENCRYPT_HOST=project1.my-server.com
  -e LETSENCRYPT_EMAIL=mail@my-server.com
  project1-one-frontend:latest

我应该如何把它分成有用的网络呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-19 16:08:22

您可以将多个网络附加到给定的容器上,这让我们在很大程度上隔离了通信量。

有用网络

上下文点,我从“有用”表示服务之间存在某种程度的隔离的问题中推断。

我认为后端应该只能访问前端,而前端应该可以访问代理。

对于docker-compose来说,这非常简单。只需在顶层指定您想要的网络,就像您为reverse-proxy所做的那样

代码语言:javascript
复制
networks:
  reverse-proxy:
    external:
      name: reverse-proxy
  frontend:
  backend:

然后是这样的:

代码语言:javascript
复制
version: '3.5'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    networks:
      - reverse-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      ...

  frontend1:
    image: some/image
    networks:
      - reverse-proxy
      - backend

  backend1:
    image: some/otherimage
    networks:
      - backend

  backend2:
    image: some/otherimage
    networks:
      - backend

  ...

这样设置,只有frontend1才能到达backend1和backend2。--我知道这不是一个选项,,因为您说您正在通过docker run运行应用程序容器(前端和后端)。但我认为这是一个很好的例子,说明了如何在Docker的关系网中大致实现你所追求的目标。

那么,如何才能完成上面docker-compose.yml中所示的操作呢?我发现了这个:https://success.docker.com/article/multiple-docker-networks

总之,您只能使用docker run附加一个网络,但是可以使用docker network connect <container> <network>将正在运行的容器连接到更多的网络中。

创建网络、运行docker-compose up或在管道中运行各种容器的顺序由您决定。如果您愿意,可以在docker-compose.yml中创建网络,或者使用docker network create并将它们导入docker-compose堆栈。这取决于您如何使用这个堆栈,这将决定这里的操作顺序。

可能很明显的指导原则是,在尝试将网络附加到容器之前,网络需要存在。最直接的管道可能看起来是..。

  1. 定义在docker-compose up中的所有网络的docker-compose.yml
  2. 对于每个app容器: docker run容器 docker network attach正确的网络
票数 1
EN

Stack Overflow用户

发布于 2018-11-19 16:23:49

..。希望建立像代理、前端和后端这样的网络。..。我认为后端应该只能访问前端,而前端应该可以访问代理。

码头的网络不与其他码头网络交谈,所以我不确定上面提到的是那些网络上的网络还是容器。您可以拥有的是多个码头网络上的容器,它可以与任何一个网络上的服务进行对话。

使用码头设计网络布局的重要部分是,在同一个网络上的任何两个容器都可以相互通信,并使用DNS找到彼此。人们经常搞砸的地方是为反向代理创建一个类似于代理网络的东西,将多个微服务附加到代理网络上,突然发现代理网络上的所有东西都可以找到对方。因此,如果您有多个需要彼此隔离的项目,它们就不可能存在于同一个网络上。

换句话说,如果app-a和app-b不能相互交谈,但确实需要与共享代理对话,那么共享代理就需要在多个特定于应用程序的网络上,而不是每个应用程序都在同一个共享代理网络上。

这可能会变得更加复杂,取决于您的架构。例如,我曾经尝试使用的一个设计是让每个堆栈都有自己的反向代理,该代理连接到应用程序专用网络和共享代理网络,而不发布任何端口。然后,全局反向代理发布端口,并与每个堆栈特定的反向代理进行对话。其优点是全球反向代理不需要预先了解所有潜在的应用程序网络,同时仍然允许您只公开一个端口,而不需要通过共享代理网络相互连接微服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53286056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档