• 端口映射与容器互联



    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中的BIO,NIO,AIO
    JAVA通过信号量避免死锁
    java死锁
    ConcurrentHashMap并不是完全的线程安全
    【技术学习】Understand Exit Codes of Docker
    【技术学习】centos7 firewall
    【现场问题】Linux Cache过大问题排查
    【技术学习】postgresql学习笔记--基础篇
    【技术学习】postgresql学习笔记--基础篇
    【监控脚本】利用selenium自动化测试样例一
  • 原文地址:https://www.cnblogs.com/Nedved/p/10472426.html
Copyright © 2020-2023  润新知