zoukankan      html  css  js  c++  java
  • 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地址 和 连接别名写上,解析的时候是解析连接别名,就可以互访了。

  • 相关阅读:
    Redis分布式锁的正确实现方式
    Redis+Jedis封装工具类
    MyCat配置文件详解--server.xml
    linux buff/cache释放
    mycat中间件--schema.xml配置文件详解
    mycat中间件--linux安装mycat1.6版本
    如何查找SHELL的进程号并杀死
    dubbo常用配置及注意事项
    xxxx
    解决docker镜像无法下载的问题
  • 原文地址:https://www.cnblogs.com/alpha118/p/10394588.html
Copyright © 2011-2022 走看看