Docker - Docker网络
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker - Docker网络相关的知识,希望对你有一定的参考价值。
一、Docker网络介绍
Docker是基于Linux Kernel(内核)的namespace,CGroups,UnionFileSystem等技术封装成的一种自定义容器格式,从而提供了—套虚拟运行环境。
1、namespace:用来做隔离的,比如pid[进程].、net【网络】、mnt【挂载点】
2、cGroups:controller Groups用来做资源限制,比如内存和CPU等
3、union File Systems:用来做Image和Contaliner分层
(一)计算机网络模型
Docker网络官网
Networking overview | Docker Documentation
OSI:开放系统互联参考模型(Open System Interconnect)
TCP/IP:传输控制协议/网际协议(TransmissionControl/nternet Protocol,是指能够在多个不同网络间实现信息传输的协议簇。TCPIP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
分层思想:分层的基本想法是每一层都在它的下层提供的服务基础上提供更高级的增值服务,而最高层提供能运行分布式应用程序的服务
(二)网卡类型
查看网卡类型
ip a
ip link show
ls /sys/class/net/
自定义添加网卡
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0
新增某网卡下的IP
ip addr add 192.168.100.120/24 dev eth0
删除某个网卡下的IP
ip addr delete 192.168.100.120/24 dev eth0
(三)Network NameSpace
Network Namespace 如实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中
添加一个namespace
ip netns add ns1
查看当前具有的namespace
ip netns list
删除namespace
ip netns delete nsl
进入指定命名空间ns1 执行 ip a 命令
ip netns exec ns1 ip a
启动lo网卡
ip netns exec ns1 ifup lo
显示网卡信息
ip netns exec ns1 ip link show
关闭lo网卡
ip netns exec ns1 ifdown lo
设置lo的状态
ip netns exec ns1 ip link set lo down
1、两个命名空间ns1,ns2之间通信
ip netns add ns2
ip netns exec ns2 ifup lo
创建一对连接信息
ip link add veth-ns1 type veth peer name veth-ns2
ip a
ip link set veth-ns1 netns ns1
ip netns exec ns1 ip a
ip netns exec ns1 ifup veth-ns1
ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns2
ip netns exec ns1 ip a
这样 ns1 和 ns2 就可以进行通信了
ip netns exec ns1 ping 192.168.0.12
ip netns exec ns2 ping 192.168.0.12
(四)Docker容器默认bridge
Docker之间通信:docker0网卡维护了一对 veth
yum install -y bridge-utils
brctl show
docker network ls
检查bridge
docker network inspect ridge
Docker容器可连接外网
(五)自定义Network
新增一个自定义network
docker network create tomcat-net
删除自定义network
docker network rm tomcat-net
docker network inspect tomcat-net
连接自定义网络
docker network connect tomcat-net tomcat01
docker network disconnect tomcat-net tomcat01
二、Docker实战
(一)mysql集群搭建
1、拉去境像
docker pu11 percona/percona-xtradb-cluster :5.7.21
2、复制pxc境像【重命名】
docker tag percona/percona-xtr adb-cluster :5.7.21 pxc
3、除原来的镜像
docker rai percona/percona-xtr adb-eluster: 5.7.21
4、创建单独的网段,给MySQL数据库集群便用
docker network create --subnet=172.20.o.0/24 pxc-net
docker network inosect pxc-net #查看详情
docker network rm pxc-net #除网段
5、创建和制除volume
docker volume create --name v1 #创建volume
docker volume rs v1 #删除volume
docker volune inspect v1 #查看详情
6、搭建pxc集群
准备三个数据卷
docker volume ls
doeker volume create --nane v1
docker volume create --name v2
docker volume create --name v3
docker volume ls
运行3个PXC容器
【CLUSTER_NAME=PXC;集群名字】
【XTRABACKUP_PASSWORD;数据库同步需要用到的密码】
创建第一个主节点
docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456
CLUSTER_NAME=PXC -e
XTRABACKUP_PASSWORD=123456 --privileged --name=node1 --net=pxc-net –ip 172.20.0.2 pxc
创建其他节点注意:-e CLUSTER_JOIM=node1
docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSOL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e
XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIM=node1 --privileged --name=node2 --net=pxc-net --ip 172.20.0.3 pxc
docker run -d -p 3303:3306 -v v3/var/lib/MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e
XTRABACKUP_PASSWORD=123456 -e CLUISTER_JOIN=node1 –privileged --name=node3 --net=pxc-net --ip 172.20.0.4 pxc
如果启动报错,或者启动服务之后立马停掉
docker logs 容器ID
(二)负载均衡服务搭建
1、拉取镜像
docker pull haproxy
2、创建haproxy配置文件
touch /tmp/haproxy/haproxy.cfg
global
#工作目录,这边要和创建容器指定的目录对应
#chroot /usr / loca1/etc/haproxy
#日志文件
1og 127.0.0.1 loca15 info
#守护进程运行
daemon
defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognu11
#连接超时〈毫秒)
timeout connect 5000
#客户端超时〈毫秒)
timeout client 50000
#服务器超时(毫秒>
timeout server 50000
#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs_monitor
#统计报告格式
stats realm Globa7\\ statistics
#登陆帐户信息
stats auth admin:admin
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口,haproxy开发的端口为3306
#假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例bind 0.0.0.0:3306
#网络协议
mode tcp
#负载t均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法: static-rr
#最少连接算法:leastconn
#请求源IP算法: source
balance roundrobin
#日志格式
option tcp1og
#在MySQL中创建一个没有权限的haproxy用户,密码为空。
#Haproxy使用这个账户对MySQL数据库心跳检测
option mysq1-check user haproxy
server MySQL_1 172.22.0.2:3306 check weight 1 maxconn 2000
server MySQL_2 172.22.0.3:3306 check weight 1 maxconn 2000
server MySQL_3 172.22.0.4:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
3、创建haproxy容器
docker run -d -p 8888:8888 -p 3306:3306 -v/tmp/haproxy:/usr /loca1/etc/haproxy --name haproxy01 --privileged --net=pxc-net haproxy
4、在MySQL数据库上创建用户,用于心跳检测
CREATE USER 'haproxy'@ '%’IDENTIFIED BY '';
5、win浏览器访问
http://centos_ip: 8888/dbs_monitor
用户名密码都是:admin
6、客户端连接王具连接
ip:centos_ip
(三)SpringBoot+nginx+MySQL项目服务搭建
1、创建对应的网络
docker network create --subnet=172.24.0.0/24 sbm-net
docker netwoek ls
2、创建SpringBoot项目
通过SpringBoot项目整合MyBatis实现CRUD操作,属性文件中配置的jdbc信息为
#jdbc的相关配置信息
spring.datasource.driverC1assName=com.mysq1.cj.jdbc.Driver
spring.datasource.ur1=jdbc:mysql://192.168.56.10:3306/haproxy-test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#连接池
spring.datasource.type=com.alibaba.druid.poo1.DruidDataSource
# mybatis给package设置别名
mybatis.type-aliases-package=com.bobo.pojo
#指定映射文件的位置
mybatis.mapper-locations=classpath:mapper/*.xm1
3、 对应的项目打成jar包,并上传到centos7中目录放在/tmp/springboot/下然后创建Dockerfile文带
yum install -y lrzsz
FROM openjdk:8
MAINTAINER zm2020
LABEL name="springboot-mybatis" version="1.O" author="zm2020"
COPY springboot-mybatis-demo-0.0.1-SNAPSHOT.jar springboot-mybatis.jar
CMD ["java" , "-jar " , "springboot-mybatis.jar"]
4、基于Dockerfile构建镜像
docker build -t sbm-image .
5、基于image创建container
docker run -d --name sb01 -p 8081:8080 --net=sbm-net --ip 172.24.0.11 sbm-image
快速访问
curl localhost:8081/user/query
6、查看启动日志
docker logs sb01
7、浏览器访问测试
8、创建多个容器
docker run -d --name sb01 -p 8081:8080 --net=pro-net --ip 172.24.0.11 sbm-image
docker run -d --name sb02 -p 8082:8080 --net=pro-net --ip 172.24.0.12 sbm-image
docker run -d --name sb03 -p 8083:8080 --net=pro-net --ip 172.24.0.13 sbm-image
9、Nginx安装
我们通过Nginx来实现负载均衡服务
在centos的/tmp/nginx下新建nginx.conf文件,并进行相应的配置
user nginx;
worker_processes 1;
events
worker_connections 1024;
http
include /etc/nginx/mime.types;
defau1t_type application/octet-stream;
sendfi1e on;
keepalive_timeout 65;
server
listen 80;
location /
proxy_pass http://balance;
upstream balance
server 172.24.0.11:8080;
server 172.24.0.12:8080;
server 172.24.0.13:8080;
include /etc/nginx/conf.d/*.conf;
10、启动Nginx
docker run -d –name my-naginx -p 80:80 -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf –network=sbm-net –ip 172.24.0.20 nginx
以上是关于Docker - Docker网络的主要内容,如果未能解决你的问题,请参考以下文章