系统安装wordpress,seo网络推广哪家专业,想做代理怎么找商家,优度公司做的网站简介 Docker从容器中抽象除出了底层的主机连接网络#xff0c;使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址#xff0c;其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。 但是容器内运行的软件没法方便的确定主机IP地址…简介 Docker从容器中抽象除出了底层的主机连接网络使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。 但是容器内运行的软件没法方便的确定主机IP地址从而阻止了容器将服务端点告知容器网络以外的服务 在Docker中网络和卷一样拥有自己的生命周期我们可以通过docker network来直接定义和管理网络。
网络类型与网络范围
网络类型 默认情况下Docker包括三种网络
bridge桥接网络。驱动-bridgeDocker的默认网络它为一台计算机上运行的所有容器提供容器间的网络连接能力。 需要注意的默认的bridge为了兼容旧版的Docker无法利用新版本的优点如服务发现、负载均衡等因此尽量创建自己的桥接网络。host主机网络。驱动-hostDocker不会为连接host网络的容器创建特殊的网络命名空间或资源。共享 Docker host 的网络栈容器的网络配置 与 host 完全一样。 host网络上的容器与主机上的网络交互方式就像未容器化的进程与主机的网络交互一样。对主机上的网络设施和接口也有完全的访问权限。 但需要注意的是host网络会有端口号冲突的问题。none驱动-null表示与外界完全隔离连接none的容器自身外部没有任何网络连接。
网络范围 Docker网络的范围有三种类型 1) 本地local指网络被限制在所在的计算机上。默认类型 2) 全局global表示在集群的每个节点上都创建网络但不在节点之间转发消息。 3) 集群swarm指网络无缝的跨接Docker集群中的所有主机。使得容器能够跨多个物理或虚拟机进行通信。 创建一个网络的基础命令为
docker network create \
--dirver [驱动类型] \
--scope [网络范围] \
--label project[标签元数据] \ #方便资源识别
--attachable \ #将网络标记为可连接的可以随时对容器与网络进行连接或分离
--subnet 10.0.1.0/24 \#为网络定义子网掩码
--ip-range 10.0.1.128/25 \#设置可分配的网络IP地址范围
[网络名]host网络只允许创建一个
NodePort publishing 节点端口发布 Docker容器网络都是关于容器之间的简单连接和路由即使是桥接网络上的容器运行Docker的宿主机外外部直接路由到。因此要将容器中运行的服务与外部网络客户端连接起来需要执行额外的步骤。 NodePort publishing是用来匹配Docker和其他容器生态系统项目的专用术语通过-p或--publish列表选项对容器的端口和主机的端口进行映射使流经主机指定端口的流量转发到容器的端口 命令示例
docker run -p [主机端口号]:[容器端口号]/[端口协议]
docker run -p [主机端口号]:[容器端口号]
docker run -p [容器端口号]最后一个命令只指定了容器端口号这样做会使主机随机选择一个端口号作为发送端口这种用法可以避免端口冲突问题。这时我们可以通过docker port命令进行端口映射查找到被分配的主机端口。
docker port [容器名] [容器端口号]容器网络的注意事项与定制化
没有防火墙或网络策略 Docker容器网络不再提供容器之间的访问控制或防火墙机制。同一容器网络上的容器具有相互无限制的网络访问权限。只有应用程序级别的身份验证和授权管理才能在同一网络上相互保护容器。
自定义DNS配置 域名系统DNS是用于将主机名映射到IP地址的协议。通过这种映射客户端可以从对特定主机IP的依赖关系中解耦而依赖于使用已知名称引用任何主机。 1dns配置 首先通过--hostname选项可以设置新容器的主机名。再通过nslookup将容器主机名映射到容器的桥接IP地址。 命令
docker run \
--hostname [容器主机名]
nslookup [容器主机名]
...2为容器指定一到多个DNS服务器 由于其他服务器不知道指定容器的主机名使得主机名的用途有限。如果使用外部dns服务器则可以共享这些主机名。并且最好使用特定的DNS服务器来保持服务的一致性。 需要注意是 1.DNS服务器地址必须是IP地址。 2.可以多次设施--dns选项来访问多个DNS服务器。 3.在容器运行时停止Docker服务并在重启Docker服务时通过编辑/etc/docker/daemon.json文件并添加或修改dns字段设置全局默认的DNS服务器容器将仍使用旧的DNS设置只有重启这些容器更改才会生效。 命令
docker run \
--dns 8.8.8.8
nslookup docker.com #解析docker.com 的IP地址
...3–dns-search --dns-search这个选项允许指定DNS搜索域名类似于默认的主机名后缀。指定搜索域名后DNS主机名后只要不包括顶级域名如.com/.net就会被附加指定的搜说域名然后进行搜索。该命令只有在创建容器时设置才能生效。 示例
docker run \
--dns-search docker.com
nslookup hub
···以上命令将解析名为hub.docker.com的主机的IP地址。我们也可以通过操作/etc/resolv.cong配置通用名称解析库的文件来让配置生效。 4重载DNS系统 --add-host选项可以为自定义的IP地址和主机名提供映射关系。可以被多次指定但要注意的是在Docker引擎启动时无法将--add-host选项设置为Docker引擎的默认值。 通过该选项①将目标主机名映射到已知的IP地址可以有效的阻断目标主机与外界的连接。②可以将主机设为代理从而为特定目的地址路由流量比如通过安全通道路由不安全的流量。 所有自定义映射关系都记录在容器的/etc/host文件中。 使用命令
docker run \
--add-host [主机名]:[IP地址] \
...总结如果DNS是更改出站流量的最佳工具那么防火墙和网络拓扑结构就是控制入站流量的最佳工具。
外部化网络管理 现在更多倾向于在none环境中创建容器然后使用一些容器管理工具来创建和管理容器网络接口、管理节点端口映射等系统集成工作。(类如Kubernetes)将网络管理外部化 当采用外部化网络管理这种方式时Docker仍然负责为容器创建网络命名空间但不会创建或管理任何网络接口。并且如果某些容器网络的管理实现了外部化而另一些没有那么内置的服务发现机制将无法将后者的容器的流量路由到前者。因此在实际应用中我们应尽量避免这种混合的网络环境。