×
Docker 前言

Docker 简介

Docker 是什么为什么要用 DockerDocker 基本概念Docker 镜像Docker 容器的运用Docker 仓库

Docker 安装指南

Ubuntu 安装DockerCentOS 安装DockerDocker 介绍镜像Docker 如何获取镜像Docker 列出镜像Docker 创建镜像Docker 存出和载入镜像Docker 移除镜像Docker 镜像的实现原理Docker 介绍容器Docker 进入容器Docker 导出和导入容器Docker 删除容器Docker 启动容器Docker 守护态运行容器Docker 终止容器Docker 仓库介绍Docker HubDocker 私有仓库Docker 配置文件Docker 如何进行数据管理Docker 数据卷Docker 数据卷容器Docker 备份、恢复、迁移

Docker 使用网络

Docker 容器如何互联Docker 外部访问容器Docker 高级网络配置Docker 快速配置指南Docker 配置 DNSDocker 容器访问控制Docker 端口映射实现Docker 配置 docker0 网桥Docker 自定义网桥Docker 工具和示例Docker 编辑网络配置文件实例:创建一个点到点连接

Docker 实战案例

使用 Supervisor 来管理进程创建 tomcat/weblogic 集群多台物理主机之间的容器互联标准化开发测试和生产环境Docker 安全Docker 内核名字空间Docker 控制组Docker 服务端防护Docker 内核能力机制Docker 其它安全特性Docker 安全总结DockerfileDockerfile 基本结构Dockerfile 指令Dockerfile 创建镜像Docker 底层实现Docker 基本架构Docker 名字空间Docker 控制组Docker 联合文件系统Docker 容器格式Docker 网络Docker Etcd项目Docker etcd简介Docker 安装etcdDocker 使用 etcdctlDocker Fig 项目Docker fig简介Docker 安装FigDocker Fig命令参考Docker fig.yml参考Docker Fig环境变量参考Docker Fig实战 DjangoDocker Fig实战 RailsDocker Fig实战 wordpressDocker CoreOS 项目Docker Kubernetes 项目Docker Kubernetes简介Docker Kubernetes快速上手Docker Kubernetes架构设计Docker 附录一:命令查询Docker 附录二:常见仓库介绍Docker 常见仓库NginxDocker 常见仓库WordPressDocker 常见仓库Node.jsDocker 常见仓库UbuntuDocker 常见仓库CentOSDocker 常见仓库MySQLDocker 常见仓库MongoDBDocker 常见仓库RedisDocker 附录三:有用的资源

Docker容器访问控制


容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。

容器访问外部网络

容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。

$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

如果为 0,说明没有开启转发,则需要手动打开。

$sysctl -w net.ipv4.ip_forward=1

如果在启动 Docker 服务的时候设定 --ip-forward=true, Docker 就会自动设定系统的 ip_forward 参数为 1。

容器之间访问

容器之间相互访问,需要两方面的支持。

  • 容器的网络拓扑是否已经互联。默认情况下,所有容器都会被连接到 docker0 网桥上。
  • 本地系统的防火墙软件 -- iptables 是否允许通过。

访问所有端口

当启动 Docker 服务时候,默认会添加一条转发策略到 iptables 的 FORWARD 链上。策略为通过(ACCEPT)还是禁止(DROP)取决于配置--icc=true(缺省值)还是 --icc=false。当然,如果手动指定 --iptables=false 则不会添加 iptables 规则。

可见,默认情况下,不同容器之间是允许网络互通的。如果为了安全考虑,可以在 /etc/default/docker 文件中配置 DOCKER_OPTS=--icc=false 来禁止它。

访问指定端口

在通过 -icc=false 关闭网络访问后,还可以通过 --link=CONTAINER_NAME:ALIAS 选项来访问容器的开放端口。

例如,在启动 Docker 服务时,可以同时使用 icc=false --iptables=true 参数来关闭允许相互的网络访问,并让 Docker 可以修改系统中的 iptables 规则。

此时,系统中的 iptables 规则可能是类似

$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0
...

之后,启动容器(docker run)时使用 --link=CONTAINER_NAME:ALIAS 选项。Docker 会在 iptable 中为 两个容器分别添加一条 ACCEPT 规则,允许相互访问开放的端口(取决于 Dockerfile 中的 EXPOSE 行)。

当添加了 --link=CONTAINER_NAME:ALIAS 选项后,添加了 iptables 规则。

$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  172.17.0.2           172.17.0.3           tcp spt:80
ACCEPT     tcp  --  172.17.0.3           172.17.0.2           tcp dpt:80
DROP       all  --  0.0.0.0/0            0.0.0.0/0

注意:--link=CONTAINER_NAME:ALIAS 中的 CONTAINER_NAME 目前必须是 Docker 分配的名字,或使用 --name 参数指定的名字。主机名则不会被识别。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)