在《爱上开源之DOCKERUI,最好的Docker管理工具,带你Docker起飞》系列视频的发布后,视频专辑链接 收到新老朋友的鼓励和关注,结合这有关网友提到的有关DOCKER两种启动方式的相关问题, 特别的写这个文章,来详细的讲一讲,并表达对广大爱好技术的朋友们的感谢和回馈
首先非常感谢关注和支持程序员紫龙的各位朋友,这篇文章主要是回应很多朋友在观看了程序员紫龙录制的爱上开源之DOCKERUI的视频系列里有关DOckerUI的启动方式的提问;
来详细说明一下Dockerui的两中启动方式的差别和我们在做这个Dockui设计的时候为什么会设计成两个不同的启动方式。
Dockerui的启动方式有两种,host(宿主机模式)和standalone(独立运行模式);通过在DockerUI的启动命令的--endpoint的参数设置来进行区别
宿主机模式(host)
启动参数
--endpoint=unix, 默认情况下,就是以这种方式启动,
docker container run --rm --name docker.ui -v /var/run/docker.sock:/var/run/docker.sock -p 9988:8999 joinsunsoft/docker.ui:latest
独立运行模式(standslone)
启动参数
--endpoint=ip:port
其中ip是docker主机的ip地址,port是docker主机的tcp管理端口,默认情况下,docker服务的启动是没有开启tcp端口的,可以通过修改docker服务的启动参数打开docker的端口;
docker container run --name docker.ui.standalone -p 9999:8999 joinsunsoft/docker.ui --endpoint=192.168.56.101:2375
朋友可以在网上搜索相关的文章,有介绍如何打开docker的tcp端口,各种方法的本质都是通过docker本身的启动命令,加入tcp参数进行实现的。不同的平台,或者不同的虚拟机都有不同的方式。
这两种启动方式的不同,实现上的本质也是不同的;
对于host启动方式,
是通过docker提供的本机/var/run/docker.sock这个unix下本机共享的通道文件,来实现和docker主机进行交互通信的实现方式。所有对于host这种启动方式,必须要有2个支持点。
1. 必须是dockerui的启动程序(镜像容器)和通信的docker主机在同一个主机上
2. dockerui运行的user必须拥有对/var/run/docker.sock这个设备通道文件的文件权限;
这也就是为什么在使用dockerui镜像以host方式启动的时候,docker container run的命令里必须要添加 -v /var/run/docker.sock:/var/run/docker.sock 这样的一个参数指定,这也就是让dockerui的容器拥有主机上的/var/run/docker.sock这个设备通道文件的文件权限;
对于standalone的启动方式,
是通过和docker主机通过docker主机已经开启的tcp/ip通信端口进行交互通信, 故这个standalone的启动方式的要求就是dockerui这个运行程序,可以通过--endpoint=ip:port指定的ip和端口访问到docker主机这个要求就足够,并不一定要求一定在同一台机器上,只要在网络里可以通过ip:port成功访问到docker主机即可。
以上就是dockerui在启动方式的2种不同, 通过文字的方式,我可以更好的准备语言,视频里没有这样全面准备的时间,一直没有让各位朋友了解的清晰; 希望各位朋友多多宽容和支持;
下面咱们再来谈一谈,为什么咱们在实现dockerui的启动方式要设计2中方式;
host的启动方式,
可以在本机进行, 通过docker主机上安装dockerui镜像,直接启动,在docker的使用范围里直接就简单的达到了启动的目的,这是他的优点,同时也是他的缺点, 由于在同一台机器上,对于一些网络管理上的要通过IP进行安全策略设置的情况下,host的启动方式就不能满足到要求,当然可以通过端口的安全隔离策略来设置安全性,但是这个和ip的安全隔离比较起来,是很明星的降低了一个级别。
但是作为standalone的方式,
由于standalone的方式,是分割在两个不同的机器(物理/逻辑), 他们可以拥有两个不同的IP地址,甚至是两个不同的IP网段,只要能够保证dockerui这个机器能够内部访问到docker主机就行,我们在做网络安全策略规划时,可以完全把dockerUI的机器的IP和端口公布到对外的网段上,docker这台需要管理的机器放到内部的网段,这样就可以实现比较高和灵活的安全策略设计。 作为企业的应用上,standalone的方式更符合现实场景的需要。
那么host这种方式可以摒弃吗。
host这种方式,是和主机共生关系,在dockerui的容器编排和集群容器管理的过程当中,会做类似sentinel(哨兵模式)的实现,作为本身对docker主机日后的一些动态扩容和集群服务编排的功能上的一些实现。这样的实现方式,类似Rancher和K8s的kubeadm的管理实现方式。当然思想借鉴与这些大型产品的思想,实现上是更小巧和灵活的实现,dockerui是更适合小型docker集群管理和容器编排的产品范围。
dockerui的这种支持两种启动方式的设计方式的最终目的,就是让dockerui适用不同的场景。
最后非常感谢给我朋友对程序员紫龙的支持和鼓励,爱上开源系列是分享开源项目的主题,通过开源项目的分享,介绍开源产品,分享开源项目创作中的灵感,设计思想,实现方法,是一件程序员紫龙非常欣慰而且觉得可以做的事情,也请更多的广大朋友关注和支持。