序言

一个容器提供一个服务,将需要的东西写成dockerfile,然后build成镜像,那么就能一次编译,到处浪啊浪。。。。


    容器提供服务,其实和大多数的服务一样,同样也是CS架构的,如下图简略:




    客户端主要是使用docker指令,例如docker pull redis;docker info 等命令,此命令会发送至docker daemon执行。


    docker daemon可以接收本机的请求也可以接受其他的主机的请求,主要是用来管理镜像,创建,运行,停止容器的操作。


    当客户端发送docker pull命令的时候,先从本地仓库查找是否存在镜像文件,如果没有,那么就会去远程仓库查找镜像,查找到后,就会下载到本地仓库中。




docker开启远程服务

    1、 修改配置文件

[root@docker-1 ~]# ls -l /etc/sysconfig/docker(配置文件路径)

-rw-r--r--. 1 root root 1301 Dec 25 00:43 /etc/sysconfig/docker

[root@docker-1 ~]# grep -i options /etc/sysconfig/docker(使用-H选项开启需要监听的连接,可以写多个,记得将IP修改为本机的IP地址)

# Modify these options if you want to change the way the docker daemon runs

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -H tcp://192.168.1.32:2376 -H unix:///var/run/docker.sock'

    2、 查看是否监听


docker可以链接外面的文件吗 docker连接远程服务器_docker

    可以看到监听已经在tcp监听和sock本地监听。

3、 验证


docker可以链接外面的文件吗 docker连接远程服务器_centos_02


在默认不指定连接主机的时候,是使用sock连接,当使用-H 指定主机IP和端口的时候,使用的是tcp方式的连接。也可以直接使用curl进行访问(注意主机名发生了变化,这是在另外一台主机上远程访问docker服务端)。

    4、可能出现的问题


docker可以链接外面的文件吗 docker连接远程服务器_centos_03



    如上,当配置文件中仅仅指定了tcp监听端口的时候,默认是不会监听docker.sock,从而在进行docker info的时候,必须要指定主机IP和端口进行tcp连接进行管理。


docker可以链接外面的文件吗 docker连接远程服务器_配置文件_04

在其他主机上,进行远程连接的时候,出现报错,no route to host,并不是路由的问题好么。。。骗子。。。。

docker可以链接外面的文件吗 docker连接远程服务器_docker可以链接外面的文件吗_05

主要原因是因为防火墙的阻挡,关闭防火墙或者开通2376端口就好了。





centos中默认的服务进程


在这里主要使用centos来进行查看相关的配置文件,但是。。。。在centos中,提供了一些其他的命令,都不知道干啥用的,MMP。。。



docker可以链接外面的文件吗 docker连接远程服务器_配置文件_06

    当直接使用docker info查看docker服务端信息的时候,当显示无法连接到docker daemon的时候,就表示docker服务端未启动


    在安装docker的时候,默认会将这个docker-comon作为依赖进行安装。


docker可以链接外面的文件吗 docker连接远程服务器_配置文件_07

对比使用封装之前的命令和封装之后的命令,查看info结构,两者。。。基本是相同的。


    启动服务端之后,可以看到打开的经常和监听的端口:


docker可以链接外面的文件吗 docker连接远程服务器_docker可以链接外面的文件吗_08

    在启动dockerd之后,默认会监听三个unix端口,主要用于直接和本机通信。。。-在netstat中-x表示查看unix端口,在此时,因为仅仅只监听了本机的unix端口,从而远程是不能连接的。


    从上面看出centos并不是使用使用dockerd来直接启动的,so。。。


docker可以链接外面的文件吗 docker连接远程服务器_docker可以链接外面的文件吗_09

 就centos牛逼,非要搞个自己的名字出来,还弄的大小那么大,并不知道为啥。。。。


    查看线程的时候,可以看到开启了好几个线程:


docker可以链接外面的文件吗 docker连接远程服务器_docker_10

    docker常用的配置文件路径如下所示:


docker可以链接外面的文件吗 docker连接远程服务器_centos_11


这些配置文件其实都是用来设置环境变量的,然后统一在docker.service中生效,需要注意的是,如果在多个地方设置了有冲突的变量,那么可能会发生错误,记得在修改之前需要备份。


    最后放一张图(在ps的时候可以看到dockerd,containerd,shim,runc):


docker可以链接外面的文件吗 docker连接远程服务器_centos_12


    dockerd也就是docker的引擎,主要用来存储容器的相关信息,并管理大部分的任务。

    containerd主要是用来管理容器运行。

    shim主要是用来初始化并且处理来自调用者的重新连接。

    runc是容器的启停和资源隔离的实现。