Docker - Docker网络

news2024/11/8 22:35:58

一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java多线程案例之阻塞队列

文章目录一. 认识阻塞队列1. 什么是阻塞队列2. 生产者消费者模型3. 标准库中阻塞队列类二. 基于循环队列实现的简单阻塞队列1. 循环队列的简单实现2. 阻塞队列的简单实现一. 认识阻塞队列 1. 什么是阻塞队列 阻塞队列本质上还是一种队列, 和普通队列一样, 遵循先进先出, 后进…

291. 蒙德里安的梦想(状态压缩dp详解)

求把 NM 的棋盘分割成若干个 12 的长方形,有多少种方案。 例如当 N2,M4 时,共有 5 种方案。当 N2,M3 时,共有 3 种方案。 如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0c…

龙芯机器JDK安装和配置

龙芯机器:[rootlocalhost j2sdk-image]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c4 Loongson-3A R4 (Loongson-3A4000) 1800MHz龙芯机器JDK安装和配置下载地址:http://www.loongnix.cn/zh/api/java/选择JDK8,选择MIPS64进行下…

2-3进程管理-进程同步

文章目录一.进程同步、互斥二.实现临界区互斥的基本方法(一)软件实现方法(二)硬件实现方法三.互斥锁四.信号量机制五.经典同步问题(一)生产者-消费者问题(二)读者-写者问题&#xff…

流逝的一年

昨天远方的大哥打来了电话,我们聊了下近况。当他问及去年是否有新的著作问世,我不禁有些赧然,解释说还在学习中… 放下电话后,我陷入了思索:又是一年划上了句号,这一年我做了什么?我又有什么收…

数据库的一些基本概念

一、服务器:(更正大家头脑中的一个错误认识) 1、服务器是一种软件,不是硬件,不是计算机。 2、不同服务器负责调用不同类型的文件。 二、表文件、数据库、数据库服务器以及SQL语句: 1、表文件: …

一条 select 语句的执行过程

MySQL 从大方向来说,可以分为 Server 层和存储引擎层。而 Server 层包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,最后 Server 层再通过 API 接口形式调用对应的存储引擎层提供的接口来执行增删改查操作。 如下即为一个简略的 select 语句…

Android动态运行时权限

android 6.0(API 级别 23)开始,android引入了运行时权限,应用安装时不向其授予权限,应用运行时向其授予权限。如果在运行时该功能没有动态地申请相应的权限,就会抛出SecurityException异常。 android的运行时权限的申请过程主要有…

C语言画一个正方体

程序截图 操作方法 鼠标拖动。左键拖动及滚轮能看到不同角度下正方体的形状,右键拖动能将最近的正方体顶点挪到这个投影面的相应位置。 按键控制。wasd 控制投影面旋转,ws 关于 x 轴旋转,ad 关于 y 轴旋转。 个人思路 首先投影面的确立需…

【寒假第一天】LeetCode刷题

🌈一.选择题👿1.1.堆是一种有用的数据结构。下列那个关键码序列是一个堆( )。 A. 94,31,53,23,16,72 B. 94,53,31,72,16,23 C. 16,53,23,94,31,72 D. 16,31,23,94,53,72D堆排序有两种排序方法:大堆排序-----根结点要大…

【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

文章目录一、函数头声明二、函数参数1、默认参数值2、具名参数三、Unit 函数四、TODO 函数抛出异常返回 Nothing 类型五、反引号函数名六、匿名函数七、匿名函数的函数类型八、匿名函数的隐式返回九、匿名函数参数十、匿名函数 it 关键字十一、匿名函数变量类型推断十二、匿名函…

JS中BOM 浏览器对象 提供的定时器

window对象提供了2个定时器方法: settTimeout()和setInterval() 1.setTimeout()定时器 语法: window.setTimeout(调用函数,[延迟的毫秒数]);延迟时间可以省略,省略则为0 用于设置一个定时器,该定时器再定时器到期后执行调用函数 …

【nodejs】npm与包

1、什么是包 Node.js中的第三方模块又叫包 2、包的来源 由第三方个人或团队开发出来的,免费供所有人使用 3、为什么需要包 由于Node.js的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。 包是基于内置模块封装出…

杨校老师课堂之IntellJ IDEA的使用技巧

下载地址: https://www.jetbrains.com.cn/idea/download/#sectionwindows 一、常规操作 1、忽略大小写,进行提示 2、启用Idea时,默认不再打开上次项目 3、设置主题 4、设置默认的字体 5、修改类头的文档注释信息 6、设置项目文件编码 7、统一…

electron与jquery起冲突,使用jquery报错解决方法

问题原因:Electron 为了整合 Node.js,会在 DOM 加入 module、exports、require 等模块和函数,和jQuery、RequireJS、Meteor、AngularJS 等发生冲突。 暴力解决方法:去除node功能加持,在加载browserWindow或者browserVi…

C++:闭包:闭包Closure理解

一:什么是闭包 闭包有很多定义,一种说法是:闭包是带有上下文的函数,说白了,就是有状态的函数,这其实就是一个类,换个名字而已。 一个函数,带上一个状态,就变成了闭包&…

共享模型之管程(四)

1.wait/notify 1.1.为什么需要wait? 小故事: ①.假设多个用户(线程)都需要进入房间使用算盘(CPU)进行计算工作,但是为了保证计算过程中的安全,老王设计了一把锁(Synchronized),每次只允许一个用户(线程)拿到钥匙进入房间(成为Owner线程); ②.小南(线程)费了九牛二虎之力,抢…

【Docker】搭建Zookeeper集群

【Docker】搭建Zookeeper集群 下载镜像 docker pull zookeeper:3.5.8wy:study wy$ docker pull zookeeper:3.5.8 3.5.8: Pulling from library/zookeeperDigest: sha256:12af523731cbe390f5332d6c1e254f1d56c734a786910d5582653445a5cee299 Status: Downloaded newer image f…

Allegro174版本新功能介绍之动态铜皮对单独层面参数设置

Allegro174版本新功能介绍之动态铜皮对单独层面参数设置 Allegro升级到了174版本的时候,可以支持动态铜皮对单独的层面进行参数设置,如下图 具体操作如下 在低版本166以及172的时候,只有Global Dynamic Shape Parameter设置,如下图,只有全局的铜皮参数设置升级到了174时候…

WMS智能仓储管理系统源码 SpringMVC物流仓库管理系统源码

淘源码:国内知名的源码免费下载平台 需要源码学习可私信我。 系统介绍: 基于SpringMVCHibernatMinidao(类Mybatis)Easyui(UI库) Jquery Boostrap Ehcache Redis Ztree等基础架构开发的物流仓库管理系…