V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daijinming
V2EX  ›  程序员

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

  •  
  •   daijinming · 2019-02-14 14:24:45 +08:00 · 3031 次点击
    这是一个创建于 2134 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    自己写是展示自己高超的技巧么
    KickAssTonight
        18
    KickAssTonight  
       2019-02-15 14:18:12 +08:00
    用 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  
       2019-02-16 10:34:04 +08:00
    links
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:27 · PVG 11:27 · LAX 19:27 · JFK 22:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.