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