• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

docker 中隔离一个系列应用,求教

  •  
  •   daijinming · Feb 14, 2019 · 3928 views
    This topic created in 2819 days ago, the information mentioned may be changed or developed.

    在 docker 中创建几个微服务,一个名 web1,另外 web1 还要引用 svr1、svr2,也就是需要创建三个镜像,运行三个容器。所以在启用的时候,需要同时运行三个容器,如果能将这三个应用组成一个局域网,web1 访问 svr1、svr2 的时候,只需要知道容器的名字就好。这样我就可以在 docker 中运行几组这样的应用,只有 web1 需要开放对外的端口。这个不知道如何在 docker 中设置,求教

    19 replies  •  2019-02-16 10:34:04 +08:00
    shylockhg
    shylockhg
    Feb 14, 2019
    1
    docker-compose
    -p 做端口映射
    daijinming
    daijinming
    OP
    Feb 14, 2019
    2
    @shylockhg 只有 web1 需要端口映射,这个到时没有问题。其他几个 svr1、svr2 只需要被 web1 调用就好,没有必要开放外网。其实我的思路就是在 docker 中创建一个局域网,只有 web1 需要被外部访问。
    webfrogs
    webfrogs
    Feb 14, 2019
    3
    docker network 了解一下
    GuryYu
    GuryYu
    Feb 14, 2019❤️2
    4
    使用 docker network 即可,

    1. 创建 docker network:
    docker network create [网络名称]
    如:
    docker network create net-xxx

    2. 定义容器在 network 内的别名
    docker network connect --alias [别名] [网络名] [容器名]
    如:
    docker network connect --alias svr1 net-xxx svr1
    docker network connect --alias svr2 net-xxx svr2

    3. 在需要调用 svr1 或者 svr2 的端口时,直接使用别名即可
    whatsmyip
    whatsmyip
    Feb 14, 2019
    5
    用 docker swarm 或者 k8s,可以满足
    walkonthemarz
    walkonthemarz
    Feb 14, 2019 via iPhone
    6
    docker-compose 就可以,建议看 docker-compose 的官方文档
    cxbig
    cxbig
    Feb 14, 2019
    7
    1. 使用 docker-compose 可以緩解配置的複雜度,默認創建一個 network 供 container 之間通信,還能自定義各自的 hostname
    2. 手動跑的話,讓這 3 個 container 加入同一個 network 也可以實現
    NUT
    NUT
    Feb 14, 2019
    8
    @whatsmyip #5 楼主按照这条路走得话,估计要崩溃。
    midasplus
    midasplus
    Feb 14, 2019
    9
    可以用 docker-compose
    whatsmyip
    whatsmyip
    Feb 14, 2019
    10
    @NUT 😂
    kaneg
    kaneg
    Feb 14, 2019 via iPhone
    11
    docker-compose 就是为这样的需求量身定做的
    ik0r
    ik0r
    Feb 14, 2019
    12
    docker-compose
    yujincheng08
    yujincheng08
    Feb 14, 2019
    13
    docker-compose
    anguiao
    anguiao
    Feb 14, 2019
    14
    用 network 是可以的,不过用 Docker Compose 更方便。同一组里面的几个容器,默认就是在一个 network 里的,没什么需求的话就用 Docker Compose 吧。
    Trim21
    Trim21
    Feb 14, 2019 via Android
    15
    docker compose 可以选择不把某个端口暴露到宿主机
    AlphaTr
    AlphaTr
    Feb 14, 2019
    16
    docker 可以创建自己的局域网

    docker network create --subnet=172.20.0.0/16 arpa-net

    然后指定容器的 IP 地址就行

    docker run -d -p 80:80 -p 443:443 --network arpa-net --ip 172.20.20.22 nginx

    不愿意暴露端口到宿主机,及不带前面 -p 参数就行

    同一个网络下,端口默认都是开放的,所以容器之间可以直接用 172.20.20.22:80 这种 IP 端口的方式访问
    yuikns
    yuikns
    Feb 15, 2019 via iPhone
    17
    当然是 docker-compose

    自己写是展示自己高超的技巧么
    KickAssTonight
    KickAssTonight
    Feb 15, 2019
    18
    用 docker-compose:

    > Expose ports without publishing them to the host machine - they ’ ll only be accessible to linked services. Only the internal port can be specified

    ```yml
    expose:
    - "3000"
    - "8000"
    ```
    saberlove
    saberlove
    Feb 16, 2019
    19
    links
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2976 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    ♥ Do have faith in what you're doing.