• 端口映射与容器互联


    端口映射实现容器访问

    1.从外部访问容器的应用

    在容器启动的时候,如果不指定对应的参数,在容器外部使无法通过网络来访问容器内的网络应用和服务的。
    可是使用 -P 或 -p 来指定端口映射,当使用 -P 时,会随机映射一个 49000~49900 的端口到容器内部开放的网络端口
    docker run -d -P training/webapp python app.py
    docker ps -l
    docker logs -f nostalgic-morse
    -p 可以指定要映射的端口,并且一个端口只可以绑定一个容器。支持的格式有:
    • IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort

    2.映射所有接口地址

    使用 HostPort:ContainerPort 格式本地的 5000 端口映射到容器的 5000 端口:
    docker run -d -p 5000:5000 training/webapp python app.py
    此时默认会绑定本地所有接口上的所有地址。多次使用 -p 可以绑定多个端口

    3.映射到制定接口的指定端口

    IP:HostPort:ContainerPort

    4.映射到指定地址的任意端口

    IP::ContainerPort
    还可以使用 udp 标记来指定 udp 端口:
    docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

    5.查看映射端口配置

    docker port CONTAINER 5000
    容器有自己的内部网络和IP地址,使用 docker [container] inspect CONTAINER 获取容器具体信息

    互联机制实现便捷访问

    接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址

    1.自定义容器名

    • 好记,一目了然
    • 重启不会改变
    docker run -d -P --name web training/webapp python app.py
    使用 docker ps -l 或 docker [container] inspect -f "{{ .Name }}" ID 查看容器名
    容器名是唯一的,docker rm 删除之前的同名容器
    执行 docker run 的时候添加 --rm 标记,则容器会在停止后立刻删除,--rm 和 -d 不能同时使用

    2.容器互联

    被连接的必须处于运行状态?
    --link name:alias name是要连接的容器名称,alias是别名
    创建一个新的数据库容器:
    docker run -d --name db training/postgres
    删除之前创建的web容器:
    docker rm -f web
    创建一个新的web容器,并将它连接到db容器:
    docker run -d -P --name web --link db:db training/webapp python app.py

    docker 通过两种方式为容器公开连接信息

    • 更新环境变量
    • 更新 /etc/hosts 文件

    使用 env 命令查看web容器环境变量

    • docker run --rm --name web2 --link db:db training/webapp env
    其中,DB_ 开头的环境变量是提供给web容器连接db容器使用,前缀采用大写的连接别名。
    ubuntu@ip-172-31-17-146:~$ docker run --rm --name web3 --link keen_chaum:keen_chaum ubuntu env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=bc3b072374e3
    KEEN_CHAUM_NAME=/web3/keen_chaum
    HOME=/root

    父容器web的hosts文件

    docker run -t -i --rm --link db:db training/webapp /bin/bash
    cat /etc/hostsdockersdoc

    可以在容器中安装ping命令测试跟db的连通

    apt-get install -yqq inetutils-ping
    ping db db会解析成它的IP
    可以连接多个子容器到父容器
     
     
    生产环境中,可能需要跨主机,跨数据中心,需要进入额外的机制,例如 SDN(软件定义网络) 或 NFV(网络功能虚拟化)的相关技术
     
  • 相关阅读:
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    IOS设计模式之一(MVC模式,单例模式)
    C#调用C++导出(dllexport)方法
    C# 多任务之 Task
    C# Remoting的一个简单例子
    C#中指针使用总结
    C# fixed详解
    C#中virtual和abstract的区别
  • 原文地址:https://www.cnblogs.com/catyuang/p/12130198.html
Copyright © 2020-2023  润新知