• docker学习笔记5 端口映射与容器互联


    之前都是单个容器的配置、启动、数据操作。

    现在配置容器的网络和通信,通过端口,多个容器之间可以通信、互联、协作。

    容器对外都可以借助实体机的网卡向外通讯,容器与容器之间可以像计算机一样通过网络互传,但是就会产生通讯成本,占用带宽。

    容器内可以通过docker的虚拟网络互连,如果容器都在一台实体机上,可以不用通过网络,直接在内部搞定,降低通讯成本。

    这样有好有不好。

    好的方面:1、效率高;2、成本降低;

    不好的方面:1、容器配置复杂了一些,如果容器很多,管理起来难度会增加;2、与传统的运维方式不一样,容易导致排查问题困难,学习成本也增加;

    个人建议在带宽足够的情况下,容器不是海量的情况下,尽量让容器的运维方式与传统方式保持一致。

    当然得根据实际的场景来定。

    ------------------------------------------------------------------

    docker container inspect  容器ID     可以查看容器自己内部网络和IP地址,一般是172的地址,所以尽量实体机不要使用这些地址,避免维护上和运行上的问题

    ------------------------------------------------------------------

    将容器的端口映射到实体机的端口上,提供对外通信的能力

    docker container run -P   镜像名  容器名                当 大写P 时,随机给容器分配个端口,docker container ps -l 可以看到端口信息

    docker container run -p 5000:5000 -p 3000:80  镜像名  容器名               当 小写p 时,  实体机端口:容器端口    将实体机的端口映射给容器,可以多条 -p  一起写

    docker container run -p IP:5000:5000  镜像名  容器名               IP:实体机端口:容器端口    将 IP地址(可以和实体机的不一样)和端口  映射给容器。一般实体机都有IP地址,用得不多

    docker container run -p IP::5000  镜像名  容器名                        IP:空:容器端口    将 IP地址(可以和实体机的不一样)和一个随机端口  映射给容器

    docker container run -p IP:5000:5000/udp  镜像名  容器名          IP:实体机端口:容器端口/udp    将 IP地址(可以和实体机的不一样)和UDP端口  映射给容器。

    docker container port 容器名  端口号       查看容器端口映射到实体机那个端口上

    ------------------------------------------------------------------

    容器与容器的内部互联(linking),即,不映射到实体机的端口上,通过 容器名 实现互访(类似DNS),实现容器与容器之间的互访。如果外部计算机要访问容器,比如客户访问部署在容器的网站,依然要进行端口映射到实体机。linking只是针对 容器对容器,这样可以避免容器的通讯端口暴露给外部,可以提升一些安全性。 

    假设已经有个容器,容器名是  db

    新建一个容器,容器名是web,通过linking 将web与db互联

    docker container run --name web --link db:db  镜像名 容器名          --link 要连接的容器名(也就是db):连接的别名。连接的别名主要用于多个容器连同一个容器是。比如,多建一个容器web2,也连db,连接的别名可以起 db_web2,这样就能够区分了。可以用 docker container ps 查看连接,里面可以看到连接的容器名和连接的别名。

    两个容器linking以后,要通过两种方式互相公开连接信息,就是要告诉对方IP地址。

    1、更新docker的环境变量;2、更新容器的 /etc/hosts 文件

    更新docker的环境变量。用env命令查看环境变量。里面有容器互联的信息。如果有更新,修改里面的就可以。具体的修改,等待下次更新。

    更新容器的 /etc/hosts 文件。 在web的 /etc/hosts 文件里面 把db(这里应该是连接别名) 的IP地址 和 连接别名写上,解析的时候是解析连接别名,就可以互访了。

  • 相关阅读:
    Linux 内核源码中likely()和unlikely()【转】
    详解likely和unlikely函数【转】
    [arm驱动]Linux内核开发之阻塞非阻塞IO----轮询操作【转】
    Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现【转】
    Linux下的hrtimer高精度定时器【转】
    Linux 高精度定时器hrtimer 使用示例【转】
    Linux 进程等待队列【转】
    【转】【Android】对话框 AlertDialog -- 不错不错
    【转】 CATransform3D 矩阵变换之立方体旋转实现细节
    【转】如何在IOS中使用3D UI
  • 原文地址:https://www.cnblogs.com/alpha118/p/10394588.html
Copyright © 2020-2023  润新知