zoukankan      html  css  js  c++  java
  • 端口映射与容器互联


    Docker 提供了两个很方便的功能来实现服务访问的基本需求
    1.允许映射容器内应用的服务端口到本地宿主主机
    2.互联机制实现容器之间通过容器名来快速访问


    外部访问容器应用

    -P 随机映射一个49000~49900的端口到内部容器开放的网络端口

        docker run -id --rm --name  -P web  docker.io/http
    [root@Service ~]# docker ps
    CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                                         NAMES
    6d58d1ed2913        docker.io/busybox                      "sh"                     4 seconds ago       Up 1 second         0.0.0.0:->49155/5000tcp   
                                                  web

    此时可以看到已经随机
    -p 指定要映射的端口 支持的格式: IP:HostPort:ContainerPort / IP::ContainerPort / HostPort:ContainerPort

    2.映射所有接口地址
    使用HostPort:ContainerPort格式将本地的5000端口映射到容器的5000端口

        docker run -id --rm --name  -p 5000:5000 web  docker.io/http

    此时默认会绑定本地所有接口上所有地址.多次使用-p 标记可以绑定多个端口

        docker run -id --rm -p 5000:5000 -p 3000:80 --name web docker.io/http

    3.映射到指定地址的指定端口
    使用IP:HostPort:ContainerPort绑定localhost的任意端口到容器的5000端口

        docker run -id --rm -p 127.0.0.1:5000:5000  --name web docker.io/http


    4.映射到指定地址的任意端口
    使用IP::ContainerPort绑定localhost的任意端口到容器的5000端口

        docker run -id --rm -p 127.0.0.1::5000  --name web docker.io/http


    也可以使用udp

        docker run -id --rm -p 127.0.0.1:5000:5000/udp  --name web docker.io/http


    5.使用dokcer port 命令来查看当前映射的端口配置,也可以查看到绑定端口的地址

    互联机制实现快速访问

    --name 自定义容器名
    --link 容器互联
    link 参数: --link link:alias ,name是要连接的容器名称,alias是这个连接的别名

    1.容器互联
    先创建一个新容器

        docker run -itd --name db docker.io/busybox


    然后创建另一个新容器,并将它连接到db容器

        docker run -itd --name web --link db:db docker.io/busybox


    查看一下状态

    [root@Service ~]# docker ps
    CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                                         NAMES
    8c13c1972c26        docker.io/busybox                      "sh"                     4 seconds ago       Up 2 seconds                                                      web
    879807d526c0        docker.io/busybox                      "sh"                     2 seconds ago      Up 2 seconds                                                     db

    进去web中,看下/etc/hosts 和ping 一下db,此时容器已经互联

    [root@Service ~]# docker exec  -it web /bin/sh
    / # cat /etc/hosts
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.17.0.2    db 879807d526c0
    172.17.0.3    8c13c1972c26
    / # ping db
    PING db (172.17.0.2): 56 data bytes
    64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.283 ms
    ^C

    可以看到在web容器中的/etc/hosts 已经添加了db的解析
    但在db中,是没有关于web解析的

     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    计算机网络的三种通讯模式(单播,广播,组播)
    java字符串面试题
    java使用纯命令行打包项目
    java字节码的工具(含IDEA插件)
    Spring配置之context:annotation与、component-scan以及annotation-driven
    Java ThreadLocal的使用案例
    对称平方数(to_string函数,stoi函数真香)
    字符串最后一位长度
    缺失的括号
    数三角形
  • 原文地址:https://www.cnblogs.com/Nedved/p/10472426.html
Copyright © 2011-2022 走看看