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、浏览器访问测试

http://IP:8081/user/query

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网络的主要内容,如果未能解决你的问题,请参考以下文章

docker目录存储结构

理解Docker

如何将docker安装到移动硬盘

Docker 学习笔记

Docker入门

Docker入门