Docker架构
Docker框架主要由Docker Client、Docker Daemon、Docker Registry、Driver、Docker Container五个模块组成,另外还有Graph和Libcontainer两个辅助模块,如下图所示:
用户通过docker-client向daemon发送命令操作docker,根据这个原理,可以通过挂载目录的方式让容器发送命令来操作其它docker容器。
docker-compose 配置文件
version: '3'
services:
control:
image: ubuntu
container_name: ysfcontrol
privileged: true
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /usr/bin/docker:/usr/bin/docker:ro
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose:ro
- /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ro
- /opt:/opt:rw
command: sleep 100000
依赖目录说明:- /var/run/docker.sock
docker.sock是daemon监听的套接字,
通过该套接字可以向daemon发送操作docker的命令,挂载该目录可以实现在容器中操控其他docker的命令
eg:curl -s --unix-socket /var/run/docker.sock http:/images/json
依赖目录说明:- /usr/lib/x86_64-linux-gnu/libltdl.so.7
libltdl.so.7是Docker命令执行所依赖的函数库,可以通过whereis libltdl.so.7命令查看具体位置
依赖目录说明:- /usr/bin/docker
将宿主机的docker命令挂载到容器中,
这样在容器中也可以使用docker ps 等命令操作宿主机的容器,
可以使用which docker命令查看具体位置
依赖目录说明:- /usr/local/bin/docker-compose
同上将宿主机的docker-compose命令挂载到容器中,
这样在容器中也可以使用docker-compose ps 等命令操作宿主机的容器
小结:
通过挂载三个目录就可以在容器中通过curl、docker、docker-compose等工具操作其它容器