docker网络

docker网络

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

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

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

创建完docker之后会自动生成一个docker网络。这是一个虚拟网卡

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

  1. 虚拟网络桥:安装开启docker之后,docker进程就会自动创建一个虚拟网络桥(docker0)

是一个虚拟的网络设备,类似于物理网络设备的交换机

  1. 分配唯一的IP地址,每次运行一个容器,docker进程都会分配唯一的且未被其他容器占用的ip地址给容器。这个ip地址是在桥接模式网络的子网中。
  2. 容器和主机通信:通过桥接模式,容器可以与主机直接通信,容器可以访问主机上的运行服务。主机也可以通过桥接网络docker0来访问容器内部的进程(iptables的nat地址转换。在主机上做了地址转换)

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

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

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

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

-P 32768开始

进入容器开启一下服务

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

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

docker的网络模式:

  1. bridge默认,在创建docker时,不需要指定网络类型,默认就是bridge
  2. host模式:容器将不会虚拟出自己的网卡,也没有自己的IP地址,全部使用宿主机的IP地址和端口。

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

公用模式,如果是单个容器运行,可以使用host模式

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

3.container模式:容器和容器之间公用一个ip和端口

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

80端口被test1容器中的nginx占用了,把test1容器中的nginx停用,然后重新打开test2容器中的nginx

4.none模式:docker容器有自己的network-space,但是这个容器没有任何网络设置。

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

docker run -itd --name test2 --network=none nginx /bin/bash

5.自定义网络:我们可以给创建一个自己定义网段

docker network ls

#查看docker容器网络信息

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

NAME:docker网络的驱动程序

SCOPE:表示网络的作用范围

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

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

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:自定义网络名称

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

#给nginx容器一个指定的ip地址

docker exec -it nginx1 bash

nignx

cd /usr/share/nginx/html

echo "guoqizhenshuai" > index.html

curl 172.18.0.10

总结:

docker网络模式

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

docker如何在创建容器时指定端口映射:(创建好的容器是无法做端口映射)

-P:随机指定

-p:自定义指定

32767:80

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

docker logs 容器名/容器ID

(静态查看)有多少看多少

docker logs --tail=10 -f test1

(-f:动态查看)从尾部开始只看最近的10条

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

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

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

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

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

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

宿主机目录和容器中目录进行挂载

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

#-v:表示进行挂载

cd test1

touch 123.txt

echo "123" > 123.txt

在容器中创建

touch 456.txt

echo "456" > 456.txt

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

#ro:只需要在容器内部的目录名称加上or实现只读模式

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

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

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

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

#-v:此时创建的是容器内部的目录

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

#创建容器使用挂载卷

容器test11

容器test12

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

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。

简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。

老版本方法:

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

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

进入容器1

docker exec -it test111 bash

yum -y install net-tools

#在容器中安装net-tools服务

ifconfig

cat /etc/hosts

ping test222

进入容器2

docker exec -it test222 bash

yum -y install net-tools

cat /etc/hosts

容器test111

容器test222

新版本方法:

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

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

进入容器1

docker exec -it test112 bash

yum -y install net-tools

进入容器2

docker exec -it test113 bash

yum -y install net-tools

指定两个容器在在同一网段中不需要做映射

容器112:

容器113

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值