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地址 和 连接别名写上,解析的时候是解析连接别名,就可以互访了。

posted @ 2019-02-18 11:29  alpha118  阅读(116)  评论(0编辑  收藏  举报