补充 网络模式说明.

Signed-off-by: ithink.chan <chenyang@autoai.com>
This commit is contained in:
ithink.chan 2020-01-02 17:56:31 +08:00
parent 42401cb73a
commit 790d7ade3a
1 changed files with 32 additions and 1 deletions

View File

@ -43,7 +43,7 @@ docker run <image name/id>
# 运行某镜像,为之创建容器,将宿主机端口影射到容器端口,并将宿主机的某目录挂载到容器的对应目录下
docker run -it -p <host ip:port><container port> -v <host dir>:<container dir> <image name/id> /bin/bash
# 运行某镜像,为之创建容器,设置网络参数,并将宿主机的某目录挂载到容器的对应目录下
docker run --net=<bridge/host> -it -v <host dir>:<container dir> <image name/id> /bin/bash
docker run --net=<bridge/host/container:container name or id/none> -it -v <host dir>:<container dir> <image name/id> /bin/bash
# 查看正在运行的容器
docker ps
# 提交针对某容器的修改,将其保存为镜像
@ -90,3 +90,34 @@ docker tag <image name/id> <repository>:<tag>
# 删除镜像
docker image rm <image name/id>
```
## 网络模式说明
### bridge 模式
Docker 容器默认使用 bridge 模式的网络。其特点如下:
* 使用一个 linux bridge默认为 docker0
* 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
* 该模式下Docker Container不具有一个公有IP因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
* Docker采用 NAT 方式将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
* 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
* NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
* 容器拥有独立、隔离的网络栈让容器和宿主机以外的世界通过NAT建立通信
### host 模式
Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace故 Docker Container可以和宿主机一样使用宿主机的eth0实现和外界的通信。换言之Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:
* 这种模式下的容器没有隔离的 network namespace
* 容器的 IP 地址同 Docker host 的 IP 地址
* 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
* host 模式能够和其它模式共存
### container 模式
Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。
### none 模式
网络模式为 none即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式那么容器内部就只能使用loopback网络设备不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境容器只能使用127.0.0.1的本机网络。