Popular blog tags

单主机Docker网络模式

Published

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
基于 Docker 技术,开发人员可以有效解决应用部署环境不一致的问题,实现 环境标准化:即一次创建部署,任意地方运行,从而方便的进行迁移、部署、维护、迭代,同时提高资源利用效率和响应速度,另外应用于资源的隔离也能有效提升安全性

 

 

Docker 发展早期是并不支持 Windows 容器的,但是后来随着 Docker 的发展,也将 Windows 系统纳入容器支持范围。
一些企业在开发过程中,会选择使用 Windows 作系统为开发和部署环境,但是 Windows 系统本身和 Linux 一样也存在版本和环境差异,应用的部署迁移同样面临环境不一致问题,因此 Docker 对 Windows 容器的支持也显得尤为必要。

Docker Hub 上的 Windows 相关镜像:

PS C:\Users\Administrator> docker search windows
NAME                                            DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
microsoft/windowsservercore                     The official Windows Server Core base image     653
microsoft/windowsservercore-insider             The official Windows Server Core insider bas…   30
dockcross/windows-x64                           64-bit Windows cross-compiler based on MXE/M…   11
toolboc/windows95                               Windows 95 in a container                       4                                       [OK]
cloudfoundry/windows2016fs                                                                      4
coderobin/windows-sdk-10.1                      Windows SDK 10.1 for Windows Container (base…   3                                       [OK]
dockcross/windows-x86                           32-bit Windows cross-compiler based on MXE/M…   3
malice/windows-defender                         Malice Windows Defender AntiVirus Plugin        2                                       [OK]
cirrusci/windowsservercore                      Windows containers that can be executed on G…   2
mgba/windows                                    Windows autobuilds                              1                                       [OK]
surazzarus/windows7-starter                                                                     1
slightlytyler/windows-test                                                                      0
bmedora/windows-login-loadgen                                                                   0
pcfeagle/windows-pipeline-image                 Docker image used to run windows pipeline of…   0
bonzofenix/windows-builder                                                                      0
netlims/windows-frontend-gateway                                                                0
shawnneal/windows-stemcell-concourse            Used by https://github.com/cloudfoundry-comm…   0
ramicro/windows-node                                                                            0
cfcommunity/windows-stemcell-concourse          For use with the Concourse tasks in the cf-c…   0
mback2k/windows-buildbot-msys2                  My personal version of a public Docker image…   0
patrickhuber/windows-stemcell-builder-runtime                                                   0
mcy93w/windowsservercore                                                                        0
ramicro/windows-base                                                                            0
ramicro/windows-openjdk                                                                         0
toktoknet/windows                               Windows cross compilers: i686 and x86_64.       0

step1.首先需要确保你的电脑上已经安装了 docker for windows 软件

step 2.切换到 Windows containers

You can run Windows containers on Windows 10, Windows Server 2016 and Windows Server 2019:

source:https://github.com/docker/labs/blob/master/windows/windows-containers/README.md

下载 Windows Server 2019 镜像

 

docker进程使用Unix Socket而不是TCP端口。

默认情况下,Unix socket属于root用户,需要root权限才能访问。

or

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令

https://www.cnblogs.com/informatics/p/8276172.html

Docker网络模式

安装Docker时,它会在系统中自动创建三个网络:

$ docker network ls
NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host


Docker内置这三个网络,运行容器时,使用该--network标志来指定容器应连接到哪些网络。

docker run --network=<NETWORK>

除非你使用选项指定,否则Docker守护程序默认将容器连接到bridge网络网络。

--network=host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。

  当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.0.186:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

--network=None

该模式关闭了容器的网络功能。该模式将容器放置在它自己的网络栈中,但是并不进行任何配置。实际上,该模式关闭了容器的网络功能,在以下两种情况下是有用的:容器并不需要网络(例如只需要写磁盘卷的批处理任务)

--network=Bridge

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

 

Useful links

docker Macvlan,--network=Bridge 介绍

https://www.cnblogs.com/zuxing/articles/8780661.html