docker从零开始网络(七) 配置daemon和容器
启用IPv6支持
在Docker容器或swarm服务中使用IPv6之前,需要在Docker守护程序中启用IPv6支持。之后,您可以选择将IPv4或IPv6(或两者)与任何容器,服务或网络一起使用。
注意:仅在Linux主机上运行的Docker守护程序上支持IPv6网络。
编辑
/etc/docker/daemon.json并将ipv6设置为true。{
"ipv6": true
}保存文件。
重新加载Docker配置文件。
$ systemctl reload docker
您现在可以使用该--ipv6标志创建网络,并使用该--ip6标志分配容器IPv6地址。
Docker和iptables
在Linux上,Docker操纵iptables规则以提供网络隔离。这是一个实现细节,您不应该修改Docker插入iptables策略的规则。
在Docker规则之前添加iptables策略
Docker的所有iptables规则都被添加到DOCKER链中。不要手动操作此表。如果您需要添加在Docker规则之前加载的规则,请将它们添加到DOCKER-USER链中。在Docker自动创建任何规则之前加载这些规则。
限制与Docker守护程序的连接
默认情况下,允许所有外部源IP连接到Docker守护程序。要仅允许特定IP或网络访问容器,请在DOCKER过滤器链的顶部插入否定规则。例如,以下规则限制对除192.168.1.1之外的所有IP地址的外部访问:
$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP
您可以改为允许来自源子网的连接。以下规则仅允许从子网192.168.1.0/24进行访问:
$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/ -j DROP
最后,您可以指定要接受的IP地址范围--src-range (记住还要-m iprange在使用时添加--src-range或--dst-range):
$ iptables -I DOCKER-USER -m iprange -i ext_if ! --src-range 192.168.1.1-192.168.1.3 -j DROP
iptables复杂,更复杂的规则超出了本主题的范围。有关 更多信息,请参见Netfilter.org HOWTO。
要防止Docker完全操作iptables策略,请将iptables设置 为false 在/etc/docker/daemon.json。这对大多数用户来说是不合适的,因为这些iptables策略需要手动管理。
集装箱网络
容器使用的网络类型(无论是网桥, 覆盖,macvlan网络还是自定义网络插件)在容器内是透明的。从容器的角度来看,它具有网络接口,包括IP地址,网关,路由表,DNS服务和其他网络详细信息(假设容器未使用none网络驱动程序)。本主题是从容器的角度来看网络问题。
发布的端口
默认情况下,当您创建容器时,它不会将其任何端口发布到外部世界。要使端口可用于Docker之外的服务,或者未连接到容器网络的Docker容器,请使用 --publish或-p标记。这将创建一个防火墙规则,将容器端口映射到Docker主机上的端口。这里有些例子。
| 标志值 | 描述 |
|---|---|
-p 8080:80 |
将容器中的TCP端口80映射到Docker主机上的端口8080。 |
-p 192.168.1.100:8080:80 |
将容器中的TCP端口80映射到Docker主机上的端口8080,以连接到主机IP 192.168.1.100。 |
-p 8080:80/udp |
将容器中的UDP端口80映射到Docker主机上的端口8080。 |
-p 8080:80/tcp -p 8080:80/udp |
将容器中的TCP端口80映射到Docker主机上的TCP端口8080,并将容器中的UDP端口80映射到Docker主机上的UDP端口8080。 |
IP地址和主机名
默认情况下,为容器分配连接到的每个Docker网络的IP地址。IP地址是从分配网络的池中分配的,因此Docker守护进程实际上充当每个容器的DHCP服务器。每个网络还具有默认子网掩码和网关。
当容器启动时,它只能使用连接到单个网络 --network。但是,您可以使用运行容器连接到多个网络docker network connect。
使用时将现有容器连接到其他网络时 docker network connect,可以使用该命令上的--ip或--ip6标志来指定其他网络上容器的IP地址。
同样,容器的主机名默认为Docker中容器的名称。您可以使用覆盖主机名--hostname。使用时连接到现有网络时docker network connect,可以使用该--alias 标志为该网络上的容器指定其他网络别名。
DNS服务
默认情况下,容器继承Docker守护程序的DNS设置,包括/etc/hosts和/etc/resolv.conf。您可以基于每个容器覆盖这些设置。
| 旗 | 描述 |
|---|---|
--dns |
DNS服务器的IP地址。要指定多个DNS服务器,请使用多个--dns标志。如果容器无法访问您指定的任何IP地址,8.8.8.8则会添加Google的公共DNS服务器,以便您的容器可以解析Internet域。 |
--dns-search |
用于搜索非完全限定主机名的DNS搜索域。要指定多个DNS搜索前缀,请使用多个--dns-search标志。 |
--dns-opt |
表示DNS选项及其值的键值对。有关resolv.conf有效选项,请参阅操作系统的文档。 |
--hostname |
容器用于自身的主机名。如果未指定,则默认为容器的名称。 |
配置Docker以使用代理服务器
如果您的容器需要使用HTTP,HTTPS或FTP代理服务器,则可以通过不同方式对其进行配置:
在Docker 17.07及更高版本中,您可以 将Docker客户端配置为自动将代理信息传递给容器。
在Docker 17.06及更低版本中,您必须 在容器中设置适当的环境变量。您可以在构建映像时(这使图像不那么便携)或创建或运行容器时执行此操作。
配置Docker客户端
在Docker客户端上,
~/.docker/config.json在启动容器的用户的主目录中创建或编辑该文件。添加如下所示的JSON,用httpsProxy或ftpProxy在必要时替换代理类型,并替换代理服务器的地址和端口。您可以同时配置多个代理服务器。您可以选择通过将
noProxy设置为一个或多个以逗号分隔的IP地址或主机来排除主机或范围通过代理服务器。*支持将该字符用作通配符,如此示例所示。{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}保存文件。
创建或启动新容器时,会在容器中自动设置环境变量。
使用环境变量
手动设置环境变量
在构建映像时,或在创建或运行容器时使用标志--env 时,可以将以下一个或多个变量设置为适当的值。此方法使镜像的可移植性降低,因此如果您使用Docker 17.07或更高版本,则应该配置Docker客户端。
| 变量 | Dockerfile示例 | docker run 例 |
|---|---|---|
HTTP_PROXY |
ENV HTTP_PROXY "http://127.0.0.1:3001" |
--env HTTP_PROXY="http://127.0.0.1:3001" |
HTTPS_PROXY |
ENV HTTPS_PROXY "https://127.0.0.1:3001" |
--env HTTPS_PROXY="https://127.0.0.1:3001" |
FTP_PROXY |
ENV FTP_PROXY "ftp://127.0.0.1:3001" |
--env FTP_PROXY="ftp://127.0.0.1:3001" |
NO_PROXY |
ENV NO_PROXY "*.test.example.com,.example2.com" |
--env NO_PROXY="*.test.example.com,.example2.com"
|
docker从零开始网络(七) 配置daemon和容器的更多相关文章
- 七、【Docker笔记】Docker中网络基础配置
一个系统一般都包含多个服务组件,这些大量的服务组件不可能放在同一个容器中,这就需要多个容器之间可以互相通信.Docker提供了两种方式来实现网络服务:映射容器端口到宿主主机.容器互联机制. 一.端口映 ...
- docker从零开始网络(三) overly(覆盖)网络
使用overly网络 该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络.该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信.Dock ...
- docker从零开始网络(二)桥接网络
使用桥接网络 在网络方面,桥接网络是链路层设备,它在网络段之间转发流量.桥接网络可以是硬件设备或在主机内核中运行的软件设备. 就Docker而言,桥接网络使用软件桥接器,该软件桥接器允许连接到同一桥接 ...
- docker从零开始网络(六)Macvlan
使用Macvlan网络 某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络.在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其 ...
- docker的网络基础配置
一.端口映射实现访问容器 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射.当使用-P标记时,Docker会随机映射一个49000~49900的端口至容器内部开放 ...
- docker从零开始网络(四 ) host网络
使用主机网络 如果host对容器使用网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离.例如,如果您运行绑定到端口80 host的容器并使用网络,则容器的应用程序将在主机IP地址的端口80上可 ...
- docker从零开始网络(一)概述
概述 预计阅读时间: 4分钟 Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载.Docker容器和服务甚至不需要知道它们部署在Docker上,或 ...
- k8s集群之Docker安装镜像加速器配置与k8s容器网络
安装Docker 参考:https://www.cnblogs.com/rdchenxi/p/10381631.html 加速器配置 参考:https://www.cnblogs.com/rdchen ...
- docker从零开始网络(五)null网络
禁用容器的网络连接 预计阅读时间: 1分钟 如果要完全禁用容器上的网络堆栈,可以--network none在启动容器时使用该标志.在容器内,仅创建环回设备.以下示例说明了这一点. 1.创建容器. [ ...
随机推荐
- Collections常用方法总结
public class CollectionsTest { public static void main(String[] args) { List<Integer> list = n ...
- Python两个内置函数——locals 和globals (学习笔记)
这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...
- windows下eclipse连接ubuntu伪分布式hadoop2.6.0
环境: win10 jdk1.7 hadoop2.6.0 linux虚拟机 Ubuntu14.04 首先把安装在Ubuntu上的hadoop2.6.0.tar.gz复制到windows系统上,解压到任 ...
- Byte数据类型—Java
字节与字符 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节,一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制最小值为0,最大值为255. UTF-8 ...
- 【bzoj2809】[Apio2012]dispatching 贪心+可并堆
题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...
- WebSocket简单介绍(WebSocket 实战)(3)
这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...
- Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips
Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips 来源:https://www.servethehome.com ...
- POJ2406 Power Strings 【KMP 或 后缀数组】
电源串 时间限制: 3000MS 内存限制: 65536K 提交总数: 53037 接受: 22108 描述 给定两个字符串a和b,我们定义a * b是它们的连接.例如,如果a =" ...
- 洛谷 P2444 [POI2000]病毒 解题报告
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...
- 获取Parameter参数值,方便调试使用
#region #warning 调试使用,获取sql参数化,拼接出完整的sql语句,复制sql明文到mssql中运行 string debugSql = queryHelper.CommandTex ...