V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

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

  •  
  •   daijinming · Feb 14, 2019 · 3467 views
    This topic created in 2636 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
        1
    shylockhg  
       Feb 14, 2019
    docker-compose
    -p 做端口映射
    daijinming
        2
    daijinming  
    OP
       Feb 14, 2019
    @shylockhg 只有 web1 需要端口映射,这个到时没有问题。其他几个 svr1、svr2 只需要被 web1 调用就好,没有必要开放外网。其实我的思路就是在 docker 中创建一个局域网,只有 web1 需要被外部访问。
    webfrogs
        3
    webfrogs  
       Feb 14, 2019
    docker network 了解一下
    GuryYu
        4
    GuryYu  
       Feb 14, 2019   ❤️ 2
    使用 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
        5
    whatsmyip  
       Feb 14, 2019
    用 docker swarm 或者 k8s,可以满足
    walkonthemarz
        6
    walkonthemarz  
       Feb 14, 2019 via iPhone
    docker-compose 就可以,建议看 docker-compose 的官方文档
    cxbig
        7
    cxbig  
       Feb 14, 2019
    1. 使用 docker-compose 可以緩解配置的複雜度,默認創建一個 network 供 container 之間通信,還能自定義各自的 hostname
    2. 手動跑的話,讓這 3 個 container 加入同一個 network 也可以實現
    NUT
        8
    NUT  
       Feb 14, 2019
    @whatsmyip #5 楼主按照这条路走得话,估计要崩溃。
    midasplus
        9
    midasplus  
       Feb 14, 2019
    可以用 docker-compose
    whatsmyip
        10
    whatsmyip  
       Feb 14, 2019
    @NUT 😂
    kaneg
        11
    kaneg  
       Feb 14, 2019 via iPhone
    docker-compose 就是为这样的需求量身定做的
    ik0r
        12
    ik0r  
       Feb 14, 2019
    docker-compose
    yujincheng08
        13
    yujincheng08  
       Feb 14, 2019
    docker-compose
    anguiao
        14
    anguiao  
       Feb 14, 2019
    用 network 是可以的,不过用 Docker Compose 更方便。同一组里面的几个容器,默认就是在一个 network 里的,没什么需求的话就用 Docker Compose 吧。
    Trim21
        15
    Trim21  
       Feb 14, 2019 via Android
    docker compose 可以选择不把某个端口暴露到宿主机
    AlphaTr
        16
    AlphaTr  
       Feb 14, 2019
    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
        17
    yuikns  
       Feb 15, 2019 via iPhone
    当然是 docker-compose

    自己写是展示自己高超的技巧么
    KickAssTonight
        18
    KickAssTonight  
       Feb 15, 2019
    用 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
        19
    saberlove  
       Feb 16, 2019
    links
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2538 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    ♥ Do have faith in what you're doing.