docker(14):docker的容器互联和zabbix样例
docker(14):docker的容器互联和zabbix样例
https://www.zabbix.com/documentation/3.4/zh/manual/installation/containers
https://www.cnblogs.com/luoahong/p/10283016.html
Docker容器都是独立的,互相隔离的环境。然而,它们通常只有互相通信时才能发挥作用。
容器互联大体有以下三种方式,使用link进行容器互联:
- 基于volume的互联
- 基于link的互联
- 基于网络的互联
使用--link参数让容器间进行交互:单方向的
注意:--link参数格式为--link name:alias,其中name是要链接的容器名称,alias是这个连接的名称。
1 docker容器间的互联
1.1 创建两个容器
[root@docker-136 ~]# docker run -d --name vm-1 centos7-ssh:v1 a5dd0cf5f7626e42e60500bef89693744ecddf942034eabd2cf526ba6e3c4a3f [root@docker-136 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a5dd0cf5f762 centos7-ssh:v1 "/usr/sbin/init" 8 seconds ago Up 5 seconds 22/tcp vm-1 [root@docker-136 ~]# [root@docker-136 ~]# docker run -d --link vm-1:web-1 --name vm-2 centos7-ssh:v1 3a38a74ffcc4b6a43a409862143e93e7ee6112fab7167418f718c392c7c66ef4 [root@docker-136 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a38a74ffcc4 centos7-ssh:v1 "/usr/sbin/init" 2 seconds ago Up 1 second 22/tcp vm-2 a5dd0cf5f762 centos7-ssh:v1 "/usr/sbin/init" 2 minutes ago Up 2 minutes 22/tcp vm-1 [root@docker-136 ~]#
1.2 容器互访
[root@3a38a74ffcc4 ~]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 web-1 a5dd0cf5f762 vm-1 172.17.0.3 3a38a74ffcc4 [root@3a38a74ffcc4 ~]# ssh root@web-1 ssh: connect to host web-1 port 22: Connection refused [root@3a38a74ffcc4 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 后启动的容器可以根据主机名,连接名,ip的方式连接先启动的容器。因为—link做了hosts解析 [root@3a38a74ffcc4 ~]# ssh root@web-1 The authenticity of host 'web-1 (172.17.0.2)' can't be established. ECDSA key fingerprint is SHA256:NBG7epRah23e9e7OgIgiFbXf5elVIi8OhTi3KTYbUP8. ECDSA key fingerprint is MD5:2c:e7:9d:e6:58:68:e6:56:d2:7b:82:9f:bd:d8:c0:20. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'web-1,172.17.0.2' (ECDSA) to the list of known hosts. root@web-1's password: Last login: Thu Aug 8 07:38:35 2019 from 192.168.0.137 [root@a5dd0cf5f762 ~]# ls anaconda-ks.cfg [root@a5dd0cf5f762 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 07:24 ? 00:00:00 /usr/sbin/init root 19 0 0 07:32 pts/0 00:00:00 /bin/bash root 36 19 0 07:34 pts/0 00:00:00 /usr/sbin/sshd -D root 37 36 0 07:34 ? 00:00:00 sshd: root@pts/1 root 39 37 0 07:34 pts/1 00:00:00 -bash root 54 39 0 07:34 pts/1 00:00:00 ps -ef 先启动的容器只能同过IP的方式连接 [root@a5dd0cf5f762 /]# ssh root@172.17.0.3 ssh: connect to host 172.17.0.3 port 22: Connection refused [root@a5dd0cf5f762 /]# ssh root@172.17.0.3 The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established. ECDSA key fingerprint is SHA256:NBG7epRah23e9e7OgIgiFbXf5elVIi8OhTi3KTYbUP8. ECDSA key fingerprint is MD5:2c:e7:9d:e6:58:68:e6:56:d2:7b:82:9f:bd:d8:c0:20. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.17.0.3' (ECDSA) to the list of known hosts. root@172.17.0.3's password: Last login: Thu Aug 8 07:38:35 2019 from 192.168.0.137 [root@3a38a74ffcc4 ~]#
1.3 link总结
l 先启动的容器无法连接后启动的容器
l 但是后启动的容器可以连接新启动的容器
l 容器间互联的方法:--link 单方向的
2 docker容器间互联的应用zabbix
https://www.zabbix.com/documentation/3.4/zh/manual/installation/containers
运行支持MySQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及Zabbix Java gateway。
2.1 启动zabbix相关容器
1. 启动一个空的MySQL服务器实例
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
docker run --name mysql-server -t \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ -d mysql:5.7
2. 启动Zabbix Java gateway实例
docker run --name zabbix-java-gateway -t \
-d zabbix/zabbix-java-gateway:latest
3. 启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例
docker run --name zabbix-server-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \ --link mysql-server:mysql \ --link zabbix-java-gateway:zabbix-java-gateway \ -p 10051:10051 \ -d zabbix/zabbix-server-mysql:latest
Zabbix server实例暴露10051/TCP端口(Zabbix trapper)给主机。
4. 启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联
docker run --name zabbix-web-nginx-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ --link mysql-server:mysql \ --link zabbix-server-mysql:zabbix-server \ -p 80:80 \ -d zabbix/zabbix-web-nginx-mysql:latest
Zabbix web 接口暴露80/TCP端口(HTTP)给主机。
[root@docker-136 ~]# docker images | grep -E "zabbix*|mysql" zabbix/zabbix-server-mysql latest 58c63c14e553 13 days ago 65.6MB zabbix/zabbix-web-nginx-mysql latest 27cfff7ef9a8 13 days ago 149MB zabbix/zabbix-java-gateway latest 705715c1c074 13 days ago 78.3MB mysql 5.7 f6509bac4980 3 weeks ago 373MB [root@docker-136 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0157be0d8da zabbix/zabbix-web-nginx-mysql:latest "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp zabbix-web-nginx-mysql fbb8488ecdd4 zabbix/zabbix-server-mysql:latest "/sbin/tini -- /usr/…" 2 minutes ago Up About a minute 0.0.0.0:10051->10051/tcp zabbix-server-mysql 30ea677e88a2 zabbix/zabbix-java-gateway:latest "docker-entrypoint.sh" 2 minutes ago Up 2 minutes 10052/tcp zabbix-java-gateway a008337eb10c mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 3306/tcp, 33060/tcp mysql-server
2.2 zabbix服务器监控客户端
安装zabbix客户端
[root@docker-137 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.2-1.el7.x86_64.rpm 获取https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.2-1.el7.x86_64.rpm 警告:/var/tmp/rpm-tmp.1bTRC7: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:zabbix-agent-4.0.2-1.el7 ################################# [100%] [root@docker-137 ~]# vim /etc/zabbix/zabbix_agentd.conf #修改zabbix-server地址 [root@docker-137 ~]# [root@docker-137 ~]# [root@docker-137 ~]# systemctl restart zabbix-agent [root@docker-137 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6807/sshd tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 15890/zabbix_agentd tcp6 0 0 :::22 :::* LISTEN 6807/sshd tcp6 0 0 :::10050 :::* LISTEN 15890/zabbix_agentd [root@docker-137 ~]#
zabbix web界面添加监控主机
重启zabbix-server服务
[root@docker-136 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0157be0d8da zabbix/zabbix-web-nginx-mysql:latest "docker-entrypoint.sh" 29 minutes ago Up 29 minutes 0.0.0.0:80->80/tcp, 443/tcp zabbix-web-nginx-mysql fbb8488ecdd4 zabbix/zabbix-server-mysql:latest "/sbin/tini -- /usr/…" 30 minutes ago Up 4 minutes 0.0.0.0:10051->10051/tcp zabbix-server-mysql 30ea677e88a2 zabbix/zabbix-java-gateway:latest "docker-entrypoint.sh" 30 minutes ago Up 30 minutes 10052/tcp zabbix-java-gateway a008337eb10c mysql:5.7 "docker-entrypoint.s…" 31 minutes ago Up 31 minutes 3306/tcp, 33060/tcp mysql-server [root@docker-136 ~]# docker restart zabbix-server-mysql zabbix-server-mysql [root@docker-136 ~]#