docker网络

2023-12-13 15:22:44

docker网络

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

桥接设备:工作在Osi模型的第二层,数据链路层,转发数据帧,mac地址

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

学习

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

1、虚拟网络桥:安装开启docker之后,docker进程就会自动创建一个虚拟网络桥(docker0),是一个虚拟的网络设备,类似于物理网络设备的交换机

2、分配唯一的ip地址,每次运行一个容器,docker进程都会分配唯一的且未被其他容器占用的ip地址给容器。这个ip地址是在桥接模式网络的子网中

3、容器和主机通信:通过桥接模式,容器可以与主机直接通信,容器可以访问主机上的运行服务,主机也可以通过桥接网络docker:0来访问容器内部的进程(iptables的nat地址转换,在主机上做了地址转换)

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

答:可以给容器做一个端口映射

-P

-p

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

-P:在创建容器时,在宿主机和容器之间做端口映射,-P随机分配一个端口给宿主机(容器的端口是不变的),-P从32768开始

进入容器开启一下服务

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

-P:随机指定

-p:指定端口,人为设置固定的端口映射

docker的网络模式:

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

2、host模式:容器将不会虚拟出自己的网卡,也没有自己的ip地址,全部使用宿主机的ip地址和端口

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

host模式又称为共用模式,如果是单个容器运行,可以使用host模式

3、container模式:容器和容器之间共用一个ip和端口 --network=container

4、none模式(用于测试容器功能):docker容器有自己的network-space,但是这个容器没有任何网络设置。这个容器没有网卡,没有IP,也没有路由,只有lo的回环网络,在none模式下,容器不可用联网 --network=none

5、自定义网络:我们可以给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:自定义网络的名称

NETWORK ID ????NAME ?????DRIVER ???SCOPE

d1b288df87d5 ??bridge ???bridge ???local

702ab90b62bb ??host ?????host ?????local

260e5ab0aa7f ??none ?????null ?????local

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

NAME:docker网络的名称

driver:docker网络的驱动程序

SCOPE:表示网络的作用范围

[root@docker ~]# docker run -itd --name nginx1 --network bridge --ip 172.17.0.10 nginx:latest /bin/bash

bbd642cafbd1b44e5566792caf4211a6892be98444bf344b917da8a5f43c52d5

docker: Error response from daemon: user specified IP address is supported on user defined networks only.

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

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

docker的网络模式:

1、bridge模式:桥接模式,也是docker的默认模式,在创建时无需指定

2、host模式:容易不会有自己的网络设备,但是可以和宿主机共享ip和端口

3、container模式:容器和容器之间共享ip和端口(但是需要先关闭其中一个容器)

4、none模式:也没有自己的网络设备,也没有网卡和ip,只有一个回环地址。127.0.0.1不能够联网。类似于飞行模式(测试容器的功能)

5、自定义网络:创建容器时,默认使用docker:0网桥是无法给容器定义ip地址的,只能自动分配。自定义网络在创建容器时,可以给容器指定ip地址

docker如何在创建容器时指定端口映射:

-P:随即指定

-p:自定义指定

docker logs 容器名/容器ID

docker logs --tail=10 -f test1

--tail=10:从尾部开始,只看最近的10条

-f:动态的查看

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

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

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

数据卷:容器如何与宿主机之间进行数据共享

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

mysql 33066:3306

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

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

(容器里只读模式)docker run -itd --name test2 -v /opt/test2:/opt/test:ro centos:7 /bin/bash

容器和容器之间数据共享:

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

容器互联:实现两个容器之间的网络通信

(老版本)docker run -itd -P --name test111 centos:7 /bin/bash

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

(新版本network自定义网络)docker run -itd -P --name test112 --network=mynetwork centos:7 /bin/bash

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

文章来源:https://blog.csdn.net/wyh20030130/article/details/134945789
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。