Docker的C/S模式
Docker的C/S模式
Docker Client通过Remote API与Docker Server通信:
- RESTful风格API
- STDIN、STDOUT、STDERR
Docker官方的Remote API Reference:
https://docs.docker.com/reference/api/docker_remote_api/
连接方式:
- unix:///var/run/docker.sock
- tcp://host:port
- fd://socketfd
Socket连接方式也就是说,可以通过本地,也可以是远程连接Docker的Server
用grep过滤关键字,第一条中就是正在运行的docker的守护进程
1.[KANO@kelvin ~]$ ps -ef|grep docker
2.root 15518 15039 0 15:41 pts/2 00:00:00 sudo docker -d -H unix:///var/run/docker.sock
3.root 15605 15518 0 15:41 pts/2 00:00:00 docker -d -H unix:///var/run/docker.sock
我们在命令行中使用docker命令就是在使用docker的客户端程序,再于守护进程进行交互
1.[KANO@kelvin ~]$ docker version
2.Client:
3. Version: 1.8.2-fc22
4. API version: 1.20
5. Package Version: docker-1.8.2-7.gitcb216be.fc22.x86_64
6. Go version: go1.5.1
7. Git commit: cb216be/1.8.2
8. Built:
9. OS/Arch: linux/amd64
10.
11.Server:
12. Version: 1.8.2-fc22
13. API version: 1.20
14. Package Version:
15. Go version: go1.5.1
16. Git commit: cb216be/1.8.2
17. Built:
18. OS/Arch: linux/amd64
19.
下面是docker的Remote API,使用linux中nc -U实现socket连接 ,GET用来查看Remote API中的一个接口info,这个接口用来返回docker的相关信息,指定使用协议是HTTP/1.1
1.[KANO@kelvin ~]$ nc -U /var/run/docker.sock
2.GET /info HTTP/1.1
3.
4.HTTP/1.1 200 OK
5.Content-Type: application/json
6.Server: Docker/1.8.2-fc22 (linux)
7.Date: Tue, 22 Dec 2015 07:44:10 GMT
8.Content-Length: 1667
9.
10.{"ID":"WRM4:ADRR:GPWT:5UBM:QC6S:WEIH:WI5O:ELJ6:6VOI:TFQJ:KKVA:EFW4","Containers":9,"Images":36,"Driver":"devicemapper","DriverStatus":[["Pool Name","docker-253:2-1976018-pool"],["Pool Blocksize","65.54 kB"],["Backing Filesystem","extfs"],["Data file","/dev/loop0"],["Metadata file","/dev/loop1"],["Data Space Used","5.797 GB"],["Data Space Total","107.4 GB"],["Data Space Available","30.75 GB"],["Metadata Space Used","5.951 MB"],["Metadata Space Total","2.147 GB"],["Metadata Space Available","2.142 GB"],["Udev Sync Supported","true"],["Deferred Removal Enabled","false"],["Data loop file","/var/lib/docker/devicemapper/devicemapper/data"],["Metadata loop file","/var/lib/docker/devicemapper/devicemapper/metadata"],["Library Version","1.02.93 (2015-01-30)"]],"MemoryLimit":true,"SwapLimit":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIp6tables":true,"Debug":false,"NFd":14,"OomKillDisable":true,"NGoroutines":27,"SystemTime":"2015-12-22T15:44:10.848855136+08:00","ExecutionDriver":"native-0.2","LoggingDriver":"json-file","NEventsListener":0,"KernelVersion":"4.2.7-200.fc22.x86_64","OperatingSystem":"Fedora 22 (Twenty Two)","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"InitSha1":"c735abe32c7f611ab0c126e178faa4e00a6c23b2","InitPath":"/usr/libexec/docker/dockerinit","NCPU":4,"MemTotal":4038705152,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"kelvin","Labels":null,"ExperimentalBuild":false}
11.
(以上演示的是本地连接)
Docker守护进程的配置和操作
查看守护进程
ps -ef | grep docker
sudo status docker
使用service命令管理守护进程
sudo service docker start
sudo service docker stop
sudo service docker restart
Docker的启动选项
-
Docker Command Line Reference:
-
启动配置文件
/etc/default/docker
-
docker -d [OPTIONS]
:-d表示以守护进程形式运行 - [OPTIONS]是守护进程的配置选项:
运行相关:
-D,--debug=false
-e,--exec-driver="native"
-g,--graph="/var/lib/docker"
--icc=true
-l,--log-level="info"
--label=[]
-p,--pidfile="/var/run/docker.pid"
Docker服务器连接相关:
-G,--group="docker"
-H,--host=[]
--tls=false
--tlscacert="/home/sven/.docker/ca.pem"
--tlscert="/home/sven/.docker/cert.pem"
--tlskey="/home/sven/.docker/key.pem"
--tlsverify=false
RemoteAPI相关:
--api-enable-cors=false
存储相关:
-S,--storage-driver=""
--selinux-enabled=false
--storage-opt=[]
Registry相关:
--insecure-registry=[]
--registry-mirror=[]
网络设置相关:
-b,--bridge=""
--bip=""
--fixed-cidr=""
--fixed-cidr-v6=""
--dns=[]
--dns-search=[]
--ip=0.0.0.0
--ip-forward=true
--ip-masq=true
--iptables=true
--ipv6=false
--mtu=0
Docker的远程访问
服务端配置:
环境:
- 第二台安装了Docker的服务器
- 修改Docker守护进程启动选项,区别服务器
- 保证Client API与Server API版本一致
对/etc/default/docker
添加
DOCKER_OPTS="--label name=docker_server_1 -H tcp://0.0.0.0:2375"
不同服务器name的值不同,用以区别服务器。docker服务一般使用2375端口
都修改完之后重启服务sudo service docker restart
可以使用ifconfig
来查看ip,然后使用curl http://ip:2375/info
来访问RemoteAPI
客户端配置同服务端:
- 使用
docker -H tcp://ip:2375 info
来访问RemoteAPI - 使用环境变量
1.export DOCKER_HOST="tcp://ip:2375"
2.docker info