赞
踩
如下图,Docker守护进程是用户与Docker交互的枢纽,因而它是理解所有相关部分的最佳切入点。它控制着用户机器上的Docker访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。 |
Docker守护进程
守护进程与服务器,守护进程是运行在后台的一个进程,不在用户的直接控制之下。服务器是负责接受客户端请求,并执行用于满足该请求所需的操作的一个进程。守护进程通常也是服务器,接收来自客户端的请求,为其执行操作。docker命令是一个客户端,而Docker守护进程则作为服务器对Docker容器和镜像进行操作。 |
我们来看几个技巧,这些技巧用于展示Docker作为守护进程高效运行,同时使用docker命令与其进行的交互被限制为执行操作的简单请求,就像与Web服务器进行交互一样。第一个技巧允许其他人连接你的Docker守护进程,并执行与你在宿主机上所能执行的相同操作,第二个技巧说明的是Docker容器是由守护进程管理的,而不是你的shell会话。 |
虽然默认情况下Docker的守护进程只能在宿主机上访问,但是有些情况下还是需要允许其他人访问它。读者可能遇到了一个问题,需要其他人来远程调试,或者可能想让DevOps工作流中的某一部分在宿主机上启动一个进程。 |
Docker可访问性:正常情况与公开情况
在开放Docker守护进程之前,必须先停止正在运行的实例。操作的方式因操作系统而异。如果不清楚怎么做,可以首先试试这个命令: |
[root@localhost ~]# sudo service docker stop
如果得到一个类似下面这样的消息,说明这是一个基于systemctl的启动系统: |
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try
to use systemctl.
可以试试这个命令: |
[root@localhost ~]# systemctl stop docker
如果这个方法有效,以下命令将看不到任何输出: |
ps -ef | grep -E 'docker (-d|daemon)\b' | grep -v grep
一旦Docker守护进程停止,就可以使用以下命令手工重启并向外界用户开放它: |
docker daemon -H tcp://0.0.0.0:2375
这个命令以守护进程方式启动Docker(docker daemon),使用-H标志定义宿主机服务器,使用TCP协议,绑定到所有IP地址上(使用0.0.0.0),并以标准的Docker服务器端口(2375)开放。如果Docker提示daemon不是一个有效的子命令,请尝试使用旧版的-d参数。 |
可以从外部使用如下命令进行连接: |
[root@localhost ~]# docker -H tcp://<宿主机IP>:2375
需要注意的是,在本地机器内部也需要这么做,因为Docker已经不再在其默认位置进行监听了。 |
在熟悉了Docker之后,开始思考Docker的其他使用场景,首先想到的使用场景之一是以运行服务的方式来运行Docker容器。 Docker容器与多数进程一样,默认在前台运行。在后台运行Docker容器最常见的方式是使用标准的&控制操作。虽然这行得通,但如果用户注销终端会话就可能出现问题,用户被迫使用nohup标志,而这将在本地目录中创建一个不得不管理的输出文件……是的,使用Docker守护进程的功能完成这一点将简洁得多。 |
要做到这一点,可使用-d选项: |
[root@localhost ~]# docker run -d -i -p 1234:1234 --name daemon ubuntu nc -l 1234
与docker run一起使用的-d标志将以守护进程方式运行容器。-i 标志则赋予容器与Telnet会话交互的能力。使用-p 将容器的1234端口公布到宿主机上。通过-- name标志赋予容器一个名称,以便后期用来对它进行引用。最后,使用 netcat(nc)在1234端口上运行一个简单的监听应答(echo)服务器。 |
如果现在使用Telnet连接它并发送消息,就可以使用docker logs命令看到容器已经接收到该消息,如下: |
[root@localhost ~]# telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
hello daemon
^]
telnet> q
Connection closed.
[root@localhost ~]# docker logs daemon
hello daemon
[root@localhost ~]# docker rm daemon
daemon
[root@localhost ~]#
(1)使用telnet命令连接到容器的netcat服务器; (2)输入发送给netcat服务器的一行文本; (3)按Ctrl+]然后按回车键退出Telnet会话; (4)输入q然后按回车键退出Telnet程序; (5)运行docker logs命令查看容器的输出; (6)使用rm命令清除容器; |
Docker把所有与容器和镜像有关的数据都存储在一个目录下。由于它可能会存储大量不同的镜像,这个目录可能会迅速变大。 如果宿主机具有不同分区,用户可能会更快遭遇空间限制,在这种情况下,第一时间想到的是移动Docker所操作的目录。 |
停止Docker守护进程,并使用-g 选项指定新的位置来启动。 首先必须将Docker守护进程停止。 假设想在/home/dockeruser/mydocker运行Docker。运行下列命令将在这个目录中创建一组新的目录和文件: |
docker daemon -g /home/dockeruser/mydocker
这些目录是Docker内部使用的,对其进行操作风险还是比较大的。 |
这个虽然看起来把容器和镜像从之前的Docker守护进程清除了。不过不用担心。如果杀掉刚才运行的Docker进程,并重启Docker服务,Docker客户端就会指回它原来的位置,容器和镜像也将回归。 如果想让这个移动永久有效,需要对宿主机系统的启动进程进行相应配置。 |
如下图:Docker客户端是Docker架构中最简单的部件。在主机上输入docker run或docker pull这类命令时运行的便是它。它的任务是通过HTTP请求与Docker守护进程进行通信。 |
Docker客户端
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-1714440493586)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。