【Docker二】docker网络模式、网络通信、数据管理

目录

一、docker网络模式:

1、概述

2、docker网络实现原理:

3、docker的网络模式:

3.1、bridge模式:

3.2、host模式:

3.3、container模式:

3.4、none模式:

3.5、自定义网络模式:

4、docker网络总结:

二、docker的数据管理:

1、数据卷

1.1、容器和宿主机之间进行数据共享:

1.2、容器和容器之间实现数据共享:

三、docker网络通信

1、容器互联:

四、docker网络练习:


一、docker网络模式:

1、概述

docker的网络就是基于桥接模式实现的

桥接模式:用于连接两个不同网络段的设备,共享通信的一种方式

桥接设备:工作在OSI模型的二层,数据链路层,转发数据帧,基于Mac地址转发

类似于交换机,只能转发同一网段,通过泛洪广播来找目标设备mac地址。学习模式

2、docker网络实现原理:

桥接模式是一种网络模式,它在Docker中的工作方式可以分为以下几个步骤:

1、虚拟网络创建:当您启动Docker守护进程时,Docker创建一个虚拟网络桥(通常称为Docker0)是一个虚拟的网络设备,类似于物理网络设备的交换机

2、分配唯一的ip地址每次您运行一个容器时,Docker分配一个唯一的IP地址给该容器

这个IP地址是在桥接模式网络的子网中

3、连接容器到桥接网络:当容器启动时,Docker将容器的虚拟网络接口连接到虚拟网络桥上。其中一个端点位于容器,而另一个端点位于主机上

4、容器之间的通信:如果有多个容器在相同的桥接网络上运行,他们可以通过各自的ip地址直接通信。Docker会自动在桥接网络上设置路由,使得容器可以与外部网络通信,而外部网络看到的是主机的IP地址

5、NAT(网络地址转换):默认情况下,Docker使用NAT技术,将容器的私有IP地址映射到主机上的公共IP地址。这样,容器可以与外部通信,而外部网络看到的是主机的IP地址

问题:docker的网桥是宿主机虚拟出来的,并不是一个真正存在的网络设备,外部网络无法寻址找到。外部网络无法直接访问docker:0这个虚拟网桥分配给容器的IP地址

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,也就是无法直接访问容器ip访问容器

如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主机(端口映射)

即Docker run创建容器时用-p/-P启用,访问到的时候就通过宿主ip+容器端口来访问容器

给容器做端口映射:

-P:创建容器的时候,在宿主机和容器之间做一个端口映射。后不接数字代表随机分配一个端口给宿主机,容器的端口是不变的

-P32768开始

-P(大写):随机制定

-p 80:80(小写):指定端口

进入容器开启一下服务

实际上,docker是在宿主机和容器之间做了一个iptables的nat地址转换。

docker run -itd --name test1 -P nginx:1.22.0 /bin/bash

-p 80:80

前面80是宿主机的端口,后面是容器的端口80

docker run -itd --name test3 -p 80:80 nginx:1.22.0 /bin/bash

做端口映射时,宿主机的端口一定是未被占用

宿主机直接查看容器产生的日志:

docker run -itd --name test11 -p 456:80 nginx

必须是在run的时候不加/bin/bash

docker logs 容器名/容器id 查看全部日志

docker logs -f 容器名/容器id 尾部查看全部,动态查看

docker logs --tail=10 -f 容器名/容器id 尾部10条,动态查看

/bin/bash就是为了让容器后台有一个运行程序,保证容器不会退出

-d后台守护运行,但是时间一长容器自动退出

加/bin/bash就是容器的标准输出,docker logs日志捕获的是cmd和entrypoint标准输出。/bin/bash和捕获日志会冲突

3、docker的网络模式:

3.1、bridge模式:

在创建docker时不需要指定网络类型,默认就是bridge

docker run -itd --name test1 -p 4300:80 nginx:1.22.0

4300是宿主机的端口

80是nginx容器的端口

访问宿主机的ip+端口就等于访问nginx容器

使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。
可以使用iptables -t nat -vnL 查看。
 

3.2、host模式:

容器将不会虚拟出自己的网卡,也没有自己的IP地址。全部使用宿主机的IP地址和端口

创建容器的时候指定网络模式:--network host

docker run -itd --name test1 --network host nginx:latest bin/bash

公用模式:如果是单个容器运行,可以使用host模式。容器的端口和宿主机端口公用一个,但是有多个容器,访问不了

3.3、container模式:

要想容器都起来必须后接/bin/bash

docker run -itd --name test1 --network host nginx:1.22.0 /bin/bash

创建一个test2和test1使用同一个ip和端口

docker run -itd --name test2 --network=container:test1 nginx:1.22.0 /bin/bash

容器中怎么启动服务:

cd /usr/bin

nginx 启动

nginx -s stop 停止

容器共用端口,但是不能同时启动。想要启动一个,其他容器必须关闭。

也就是说共用端口,只能使用一个

启动test1的nginx:

停止test1的nginx

nginx -s stop

3.4、none模式:

docker容器有自己的network-space,但是这个容器没有任何网络设置。

这个容器没有网卡,没有ip没有路由,只有lo回环网络。在none模式下,容器不可以联网(在工作中是用于容器功能测试用)

不能联网不能访问

封闭的网络能很好的保证容器的安全性。

docker run -itd --name test3 --network none nginx:1.22.0 /bin/bash

3.5、自定义网络模式:

我们可以给docker创建一个自己定义的网段

docker network ls

NETWORK ID:这个是docker网络唯一网络id

NAME:docker网络的名称

DRIVER:网络的驱动程序

SCOPE:

docker run -itd --name test6 --network bridge --ip 172.17.0.10 nginx:latest /bin/bash

在使用默认docker:0网桥时,创建容器是不能指定IP地址的,只能由docker网桥自动分配

除非用户自定义的网络才可以给容器自定义IP地址

创建自定义网络:

可以先自定义网络,再使用指定IP运行docker

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

--opt "com.docker.network.bridge.name"="docker1":这里可以不加,但是网卡名称难以识别,系统会给你命名复杂名称

mynetwork:自定义网络的名称

有自定义网段之后,创建容器的时候就可以自定义IP地址了

docker run -itd --name nginx1 --network mynetwork --ip 172.18.0.10 nginx:latest /bin/bash

给容器自定义IP地址为 172.18.0.10

自定义IP地址,一定要先自定义网桥

4、docker网络总结:

docker的网络模式:

  1. bridge桥接模式:也是docker的默认模式,在创建时无需指定
  2. host模式:容器不会有自己的网络设备,但是可以和宿主机共享ip和端口
  3. container模式:容器和容器之间共享ip和端口
  4. none模式:也没有自己的网络设备,也没有网卡、ip。只有一个本地的回环地址。127.0.0.1。不能够联网的。相当于一个飞行模式,只能自己访问自己。一般用于测试容器的功能
  5. 自定义网络模式:创建容器时,默认使用docker0网桥是无法给容器定义IP地址的,自能自动分配,自定义网络在创建容器时,可以给容器指定IP地址

docker如何在创建容器时指定端口映射:
docker没有二次配置的机制,只能在创建的时候指定

-P(大写):随机指定端口

-p(小写):自定义指定端口

-p 32768:80 32768是宿主机的端口,后面80是容器的端口

docker容器外部查看日志

docker run -itd --name test11 -p 456:80 nginx

必须是在run的时候不加/bin/bash

docker logs 容器名/容器id 查看全部日志

docker logs -f 容器名/容器id 尾部查看全部,动态查看

docker logs --tail=10 -f 容器名/容器id 尾部10条,动态查看

/bin/bash就是为了让容器后台有一个运行程序,保证容器不会退出

-d后台守护运行,但是时间一长容器自动退出

加/bin/bash就是容器的标准输出,docker logs日志捕获的是cmd和entrypoint标准输出。/bin/bash和捕获日志会冲突

二、docker的数据管理:

1、数据卷

1.1、容器和宿主机之间进行数据共享:

数据卷:是一个供容器使用的特殊的目录,在容器中,和宿主机的目录进行映射,主机和宿主机之间都可以对目录中的文件进行修改,而且双方是同步生效。对镜像也没有影响。宿主机和容器之间实现数据迁移

MySQL  33066:3306

宿主机的目录和容器中的目录进行挂载(映射关系)

docker run -itd --name test1 -v /opt/test1:/opt/test centos:7 /bin/bash

test1是宿主机目录

test是容器目录

docker run -itd --name test2 -v /opt/test2:/opt/test:ro centos:7 /bin/bash

创建只读模式,容器里面只能读

容器里面的目录的文件只能看

1.2、容器和容器之间实现数据共享:

test1 test2 可以有一个或者多个映射目录,实现数据互传,数据同步

数据卷容器:只提供挂载点,让另一方来收集数据

docker run -itd --name test11 -v /opt/data1 -v /opt/data2 centos:7 /bin/bash

docker run -itd --volumes-from test11 --name test12 centos:7 /bin/bash

test11和test12 实现容器间数据共享

三、docker网络通信

1、容器互联:

实现两个容器之间网络通信

老版本方法:

第一个容器创建:

docker run -itd -P --name test111 centos:7 /bin/bash

第二个容器

docker run -itd -P --name test222 --link test111:test222 centos:7 /bin/bash

在centos容器中下载net-tools工具可以用Linux命令

yum -y install net-tools

要互ping要做映射

新版本都用network指定:

自定义网络实现网段互ping

docker run -itd -P --name test112 --network=mynetwork centos:7 /bin/bash

docker run -itd -P --name test113 --network=mynetwork centos:7 /bin/bash

同一网段中不用做映射就可以实现互ping

新版本建议使用

四、docker网络练习:

1、部署一个MySQL镜像,创建一个MySQL容器,用navicat实现可以直接访问容器的MySQL,MySQL宿主机:33066

MySQL容器:3306

2、创建一个数据卷。在宿主机可以看到容器内MySQL的日志文件

创建运行mysql容器,并建立数据卷:

docker run -itd --name mysql1 -v /opt/demo1:/opt/test -p 33066:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.20

本机MySQL远程登录测试:

navicat:

my.cnf配置文件拖出来修改

docker cp mysql1:/etc/mysql/my.cnf /opt

重启docker容器

docker restart mysql1

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言指针详解下

指针下 1 指针与字符串 int main01(){//指针与字符串char a[] "helloworld";//定义了一个字符数组,字符数组内容为helloworld\0//定义一个指针用来保存数组首元素的地址char * p a;printf("%s\n",p);//%s打印一个字符串,要的是首个字符的地址printf(…

MySql概述及其性能说明

MySQL是一种开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,现属于Oracle公司。MySQL是最流行的开源数据库之一,被广泛地应用于Web开发中。MySQL提供了一个高度稳定可靠的数据存储解决方案,同时也可以很容易地跨平台运行。My…

软件中提示找不到msvcp140.dll无法继续执行代码,运行打开软件怎么弄

今天打开CAD提示找不到msvcp140.dll,这是一个很常见的问题,可能是由于系统缺少这个重要的动态链接库文件导致的。本文将介绍五个解决方法,以及msvcp140.dll文件的作用和丢失原因。 一、msvcp140.dll文件的作用 msvcp140.dll是Microsoft Vis…

一对多聊天

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

基于互一致性学习的半监督医学图像分割

Mutual consistency learning for semi-supervised medical image segmentation 基于互一致性学习的半监督医学图像分割背景贡献半监督学习 其它缓解过拟合的方法实验方法损失函数Thinking 基于互一致性学习的半监督医学图像分割 Medical Image Analysis 81 (2022) 102530 背…

Spring AOP带你了解整个流程,让面试官只能仰望

文章目录 一&#xff0c;介绍二&#xff0c;什么是JDK动态代理以及CGLIB代理三&#xff0c;源码流程图小结 一&#xff0c;介绍 提示&#xff1a;解析 A[“JavaConfig”] --> B[“EnableAspectJAutoProxy”]&#xff1a; 在Spring配置中&#xff0c;启用AspectJ自动代理功能…

【尘缘送书第五期】Java程序员:学习与使用多线程

目录 1 多线程对于Java的意义2 为什么Java工程师必须掌握多线程3 Java多线程使用方式4 如何学好Java多线程5 参与方式 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰…

【C语言快速学习基础篇】之二控制语句、循环语句、隐式转换

文章目录 一、控制语句1.1、for循环1.2、while循环1.3、注意&#xff1a;for循环和while循环使用上面等同1.4、do while循环1.4.1while条件成立时1.4.2、while条件不成立时 C语言介绍 C语言是一门面向过程的计算机编程语言&#xff0c;与C、C#、Java等面向对象编程语言有所不同…

【微服务】springboot整合quartz使用详解

目录 一、前言 二、quartz介绍 2.1 quartz概述 2.2 quartz优缺点 2.3 quartz核心概念 2.3.1 Scheduler 2.3.2 Trigger 2.3.3 Job 2.3.4 JobDetail 2.4 Quartz作业存储类型 2.5 适用场景 三、Cron表达式 3.1 Cron表达式语法 3.2 Cron表达式各元素说明 3.3 Cron表达…

配置BFD状态与接口状态联动示例

1、BFD检测IP链路。 在IP链路上建立BFD会话&#xff0c;利用BFD检测机制快速检测故障。BFD检测IP链路支持单跳检测和多跳检测&#xff1a; BFD单跳检测是指对两个直连系统进行IP连通性检测&#xff0c;“单跳”是IP链路的一跳。 BFD多跳检测是指BFD可以检测两个系统间的任意路…

UDP通讯

本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 UDP通信 主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象&#xff0c;这就是UDP对比TCP的优势&am…

股市复苏中的明懿金汇:抓住新机遇

2023年对于明懿金汇来说是充满挑战与机遇的一年。面对复杂多变的市场环境&#xff0c;明懿金汇展现了其对市场趋势的敏锐洞察和卓越的策略适应能力。以下是该公司在2023年的主要投资策略和市场适应方式的详细分析。 随着2023年中国股市迎来反弹&#xff0c;明懿金汇迅速调整了…