OverView
为什么需要Docker
如果我需要部署一个服务,那么我需要提前部署其他应用栈,不同的应用栈会依赖于不用的操作系统和环境。这样做会产生一些负面影响:
- 不同版本依赖
- 较长的部署时间
- 不同的Dev/Test/Prod环境
这时我们需要一个工具去解决这样的问题,Docker出现了。
Getting Started
安装:https://docs.docker.com/engine/install/
常见的操作系统如Suse,Ubuntu,Fedora,CentOS,它们都包含两种事物,OS内核和软件集合。OS内核负责与底层硬件进行交互,软件让这些操作系统产生差异,软件可能包含了不同的用户界面驱动。
NetWorking
网络类型
当我们安装Docker时,它会自动创建三种网络:Bridege,None,Host
Bridge Network是私有内部网络,所有容器被默认绑定这个网络,并且得到一个内部IP地址,容器可以相互之间进入使用内部IP,为了从外部世界进入这些容器,在Dockers Host映射这些容器的端口。
另一种外部进入容器方法就是将容器绑定到Host Network上,但这样就意味着你不能运行多个相同端口的容器在相同的Docker Host上。
None Network,容器没有绑定在任何网络上,不能进入如何外部网络,其他容器也无法访问。它们运行在一个孤立的网络中。
查看当前系统存在的网络数量
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6a34bc9fc8e0 bridge bridge local
e1bd4eeb89ea host host local
cc017d20d8c9 none null local
用户自定义网络
$ docker network create \
> --driver bridge \
> --subnet 182.18.0.0/16 custom-isolated-network
34c7ef396c52c8cd86c7f927f56d2aabe2384e1fbd42c018056d124ff8138312
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6a34bc9fc8e0 bridge bridge local
34c7ef396c52 custom-isolated-network bridge local
e1bd4eeb89ea host host local
cc017d20d8c9 none null local
Embedded DNS
容器也可以相互到达使用它们的名字,举个例子,目前拥有一个App服务和一个mysql数据库容器运行,我们可以使用Mysql服务的内部IP进行数据库访问,但这个方法不推荐,因为当系统重启时,服务的内部IP不一定一直不变,所以可以使用 DNS Server