首页天道酬勤docker原理详解,docker分层原理

docker原理详解,docker分层原理

admin 05-12 17:59 201次浏览

文章目录1.docker网络1.1原理1.2四种网络模式1.2.1主机模式1.2.2 container模式1.2.3 none模式1.2.1构建模式1.docker网络3.1.1 3.2文件方法3.2.1装载卷方法3.2.2创建装载卷容器DNS4.1配置手动设置所有容器的DNS4.2

1 .文档服务器网络1.1原理

Docker使用Linux网桥在宿主机上虚拟化Docker容器网桥(Docker0)。 当Docker启动容器时,它会根据Docker桥的网段为容器分配一个称为Container-IP的IP地址。 此外,docker桥是每个容器的默认网关。 同一宿主机中的所有容器都访问同一桥接器,因此可以通过容器的Container-IP直接在容器之间进行通信。

Docker网桥是宿主机虚拟化的,不是实际存在的网络设备。 外部网络不能寻址。 这意味着外部网络无法直接通过Container-IP访问容器。 如果希望容器可以通过外部访问进行访问,请将容器端口映射(端口映射)到主机主机;如果要访问容器,请从宿主机IP]:[容器端口访问容器

1.2四种网络模式host模式

容器和宿主机共享网络名称空间

container模式

容器与另一个容器共享网络名称空间。 例如,k8s的pod是多个容器共享一个网络名称空间

none模式

容器有独立的网络名称空间,但没有进行IP配置、桥接等网络配置

bridge模式

默认模式

安装docker时,默认情况下安装三个网络: bridge、host和none,并以其模式名称命名网络。 容器连接网络的默认值为bridge

1.2.1主机模式启动容器使用主机模式时,此容器与宿主机共享网络名称空间,而不是获取独立的网络名称空间。 容器虚拟地弹出自己的网卡,并使用宿主机上的IP和端口,而不是配置自己的IP等。 但是,容器的其他方面,例如文件系统等还是与宿主机隔离

使用主机模式的容器可以直接使用宿主机的IP地址与外部进行通信。 容器内部的服务端口也可以在不配置NAT的情况下使用宿主机端口

优点:网络性能高

缺点:已由docker host使用的端口不可用,网络隔离性差

构成

-net=主机

1.2.2容器模式在此模式下,指定新创建的容器和现有容器共享网络名称空间,而不是与宿主机共享。 新创建的容器与指定的容器共享IP、端口范围等,而不是创建自己的网卡或配置自己的IP。 同样,两个容器除了网络方面外,其他东西(如文件系统)是隔离的。 两个容器的进程可以通过loNIC设备进行通信。

1.2.3无模式使用无模式。 docker容器有自己的网络名称空间,但没有docker容器的网络配置。 这意味着此docker容器没有网卡、IP、路由等信息,我们需要向docker容器中添加网卡或配置IP

在此网络模式下,容器只有lo环网络,没有其他网卡。 这种网络无法接入网络,封闭的网络很好地保证了容器的安全。

1.2.4 bridge模式docker进程启动时,将在主机上创建一个名为docker0的虚拟桥,在此主机上启动的docker容器将连接到此虚拟桥。 虚拟桥的工作方式与物理交换机相同,主机上的所有容器都通过交换机连接到双层网络

将docker0子网中的IP分配给容器并使用,并将docker0的IP地址设置为容器的默认网关。 在主机上创建一对虚拟网卡veth pair设备,docker将veth pair设备的一端放入新创建的容器中,eth0(容器的网卡),另一端放入主机中,然后veth xxx

bridge模式是docker的默认网络模式,如果未指定,则默认选择。 使用docker run -p时,docker实际上可以在iptables中创建DNAT规则,实现端口转发功能,并在iptables -t nat -vnL中查看

docker网络语法

dockernetworkcreate-dbridge net1#-d :参数指定docker网络类型,有bridge、overlay。 不指定默认的bridge。 其中,overlay网络类型用于Swarm mode#net1,显示此网络环境名称为2.1的现有网络环境docker network ls输出参数。

br> NETWORK ID:该网络环境ID号
NAME:该网络环境名称
DRIVER:该网络类型
SCOPE:该网络范围(local本地)

3.容器互联 3.1网络方式 3.1.1启动两个容器

nginx

docker run -d --name=nginx -net my_net --network-alias nginx -v /www:/usr/local/nginx/html -p 80:80 nginx##-net指定该容器加入的网络环境,在compose的配置文件中则是networks##--network-alias给该容器的网络起个别名

php

docker run -d --name=php -net my_net --network-alias php -v /www:/usr/local/nginx/html php 3.1.2证明此时两个容器在同一网络 1.docker exec -it nginx ping php#等于进入nginx并在打开时输入ping php

此时可以ping通,两个容器可以进行相互操作配置

3.2文件方式 3.2.1挂载卷方式

把宿主机同一目录挂载到不容容器内,使这些容器可以互相通信(文件数据传输、共享)

docker run -v /www:/var/share/nginx/html nginx1 docker run -v /www:/var/www/html httpd1 3.2.2创建挂载卷容器

创建一个容器,将该容器作为挂载卷容器,将该容器挂载到不同的服务容器内,使他们可以通过共同的文件夹互相通信

#创建挂载卷容器docker run -d --name datafile -v /var/share/nginx/html centos:7 bash -c [while true;do echo 1;done;]#输出无线循环,使该容器保持一个进程占用,否则docker会将无服务容器杀死#在挂在卷内创建文件docker exec -it datafile bashecho “this is test” > /var/share/nginx/html/test.html #创建服务容器docker run -d --name nginx1 --volumes-from datafile nginx:latest#查看挂载文件docker exec -it nginx1 ls /var/share/nginx/htmltest.html 4.配置DNS 4.1设置全部容器的 DNS

在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

{ "dns" : [ "114.114.114.114", "8.8.8.8" ]}

设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。

配置完,需要重启 docker 才能生效。

查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:

$ docker run -it --rm ubuntu cat etc/resolv.conf#启动容器并在容器内执行该命令,查看某一容器内的dns映射文件 4.2手动设置某一容器DNS docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

参数说明:

–rm:容器退出时自动清理容器内部的文件系统。

-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。

–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。

vue项目中canvas实现截图功能java计算机毕业设计网上超市系统源码+系统+数据库+lw文档+mybatis+运行部署linux中出现网络故障该如何排除-linux运维详细讲解Flask-Vue前后端分离的过程【容器云 UK8S】操作指南:Docker 和Containerd 容器引擎命令对比Paste Image插件用Python编辑现有PDF页面
docker桥接模式,docker compose使用 dockerhost是什么,docker bridge模式
相关内容