(四)Docker进阶网络模式与特权指令

这篇具有很好参考价值的文章主要介绍了(四)Docker进阶网络模式与特权指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4.1 docker网络模式简介

Docker支持多种网络模式,包括bridge、host、none和overlay等。不同的网络模式有不同的特点和适用场景,下面对这些网络模式进行详细的介绍。

  • Bridge模式
    Bridge模式是Docker的默认网络模式。在Bridge模式下,Docker会创建一个虚拟的Bridge网络,Docker容器会自动加入这个网络中。Bridge网络会自动分配IP地址,容器之间可以通过IP地址相互通信。同时,Docker还会为每个容器分配一个域名,容器可以通过域名相互访问。

    Bridge模式的优点是简单易用,容易进行配置。同时,容器之间相互隔离,不会相互影响。但是,由于每个容器都会分配一个IP地址,当容器数量较多时,IP地址可能会耗尽,同时,容器之间的通信需要通过IP地址进行,不够直观。

  • Host模式
    Host模式下,容器和宿主机共享同一个网络命名空间,容器不再有自己的网络接口,也不会分配独立的IP地址。容器直接使用宿主机的IP地址和端口,因此在Host模式下,容器的网络性能会得到提升。

    Host模式的优点是网络性能好,因为容器直接使用宿主机的网络接口,而不需要进行NAT转换。但是,由于容器和宿主机共享网络命名空间,容器之间的隔离性较差,容器之间的端口号不能重复。

  • None模式
    None模式下,容器不会分配任何网络资源,也没有独立的网络接口。因此,在None模式下,容器不能与外部网络通信,也不能与其他容器通信。

    None模式的优点是简单,因为容器不需要进行任何网络配置。但是,None模式下的容器无法与外部网络通信,只能在宿主机上进行本地访问。

  • Overlay模式
    Overlay模式是Docker Swarm集群中使用的网络模式。在Overlay模式下,Docker会自动创建一个虚拟的Overlay网络,容器会自动加入这个网络中。Overlay网络可以跨越多个宿主机,容器之间可以通过域名进行通信。

    Overlay模式的优点是可以跨越多个宿主机,容器之间可以进行跨主机通信。但是,由于Overlay网络需要进行NAT转换,因此网络性能不如Bridge模式。

除了以上四种网络模式外,Docker还支持其他一些网络模式,如Macvlan模式、IPvlan模式、Wireguard模式等。这些网络模式在特定场景下可以发挥重要作用,但是不太常用。

docker 设置网络模式命令如下

docker run -d --net=host nginx

4.2 使用自定义网络实现单向通信

假设我们需要创建两个容器 container1 和 container2,它们需要在同一个自定义网络 mynetwork 中,并且 container1 需要能够与 container2 通信,而 container2 不需要与 container1 通信。

首先,我们需要创建自定义网络 mynetwork:

docker network create mynetwork

然后,我们可以创建 container1,并将其加入 mynetwork:

docker run -d --name container1 --network mynetwork <image1>

接着,我们可以创建 container2,并将其加入 mynetwork:

docker run -d --name container2 --network mynetwork <image2>

现在,我们需要让 container1 能够与 container2 通信,而 container2 不需要与 container1 通信。我们可以使用容器名称(container2)来解析 container2 的 IP 地址,并将其添加到 container1 的 /etc/hosts 文件中:

docker exec -it container1 sh -c "echo '<container2_ip> container2' >> /etc/hosts"

注意,这里的 <container2_ip> 应该替换为 container2 的 IP 地址。可以使用以下命令获取 container2 的 IP 地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2

现在,container1 就可以使用 container2 的主机名(container2)访问它了,例如:

curl http://container2:port

其中,port 是 container2 暴露的端口号。而 container2 无法通过主机名访问 container1。

4.3 docker容器利用brige网桥实现双向通信

创建一个新的网桥:docker network create -d bridge my_bridge
启动第一个容器:docker run -itd --name tomcat centos:7
启动第二个容器:docker run -itd --name redis centos:7
把第一个容器加入网桥:docker network connect my_bridge tomcat
把第二个容器加入网桥:docker network connect my_bridge redis
最后分别进入俩个容器中进行验证

4.4 docker 容器特权模式介绍

Docker 特权模式是指容器可以访问主机系统的特权级别资源和设备,例如可以访问主机系统的网络栈、文件系统、设备节点等,这种模式可以给予容器更高的权限,但也增加了安全风险。

默认情况下,Docker 容器是以非特权模式运行的,也就是说,容器内的进程只能访问容器内部的资源,而不能访问宿主机上的资源和设备。如果需要在容器内访问主机系统的特权资源和设备,则需要在启动容器时使用 --privileged 选项,将容器运行在特权模式下。

在特权模式下,容器内的进程将以 root 用户身份运行,这样容器内的进程就可以访问主机系统的特权级别资源和设备。同时,特权模式下的容器也可以执行一些特权操作,例如加载内核模块、修改网络配置等。

需要注意的是,特权模式可能会带来安全风险,因为容器在该模式下可以访问主机上的任何设备和文件系统,甚至可以更改主机上的网络配置。因此,在使用特权模式时,应格外谨慎,并确保只使用必要的权限。

Docker 特权模式可以通过 --privileged 标志启动容器来启用。可以在 docker run 命令中使用该标志,例如:

docker run --privileged my_image

此外,也可以在 Dockerfile 中使用 privileged: true 指令来启用容器的特权模式。例如:

FROM my_base_image

# ...

# 启用特权模式
# 注意:此处指令使用的是 true,而非 --privileged
# 因为 Dockerfile 中无法使用命令行标志
# 该指令等效于在 docker run 命令中使用 --privileged
# 如果该指令不写,则默认情况下容器处于非特权模式
# 特权模式可能会带来安全风险,谨慎使用
# 参考文档:https://docs.docker.com/engine/reference/builder/#security-configuration
#--rm 参数表示在容器退出时自动删除该容器
RUN ["docker", "run", "--rm", "--privileged", "echo", "Privileged mode enabled"]

4.5 docker Volume数据共享

Docker Volume 是一种可以在容器和主机之间共享数据的方式。Docker Volume 可以用于在容器之间共享数据,也可以用于持久化数据,使得即使删除容器数据仍然存在。

Docker Volume 的创建和管理可以通过命令行和 Docker Compose 来实现。以下是一些使用 Docker Volume 的示例:
1.创建一个 Docker Volume,并将其挂载到一个容器中:

docker volume create myvolume
docker run -it -v myvolume:/app alpine sh

这个命令会创建一个名为 myvolume 的 Docker Volume,并将其挂载到容器的 /app 目录中。alpine 镜像会被下载并运行一个 shell,从而可以在容器中操作 /app 目录。

2.将一个本地目录挂载到一个容器中:

docker run -it -v /path/to/my/folder:/app alpine sh

这个命令会将本地目录 /path/to/my/folder 挂载到容器的 /app 目录中。然后 alpine 镜像会被下载并运行一个 shell,从而可以在容器中操作 /app 目录。

3.将一个 Docker Volume 挂载到一个容器中,并在容器之间共享数据:
首先,创建一个 Docker Volume:

docker volume create mydata

然后,创建两个容器,都将这个 Docker Volume 挂载到容器的 /app 目录中:

docker run -d --name=container1 -v mydata:/app nginx
docker run -d --name=container2 -v mydata:/app nginx

这个命令会创建两个名为 container1 和 container2 的容器,并将它们都连接到名为 mydata 的 Docker Volume。由于两个容器都将 mydata 挂载到 /app 目录中,它们之间可以共享数据。

4.DockerFile 使用VOLUME
Dockerfile 中的 VOLUME 指令可以在镜像构建时定义一个或多个目录,并且这些目录在容器启动时可以被映射为 Docker 卷,从而实现容器内外数据的共享。
例如,在 Dockerfile 中使用 VOLUME 定义一个目录,如下所示:

FROM ubuntu:latest
VOLUME /mydata

这个 Dockerfile 构建出的镜像可以将容器内的 /mydata 目录映射到宿主机的一个目录,并可以在容器启动时指定一个宿主机目录作为数据卷,如下所示:

docker run -v /host/data:/mydata -it myimage

以上是一些使用 Docker Volume 的示例。Docker Volume 的使用可以方便地实现容器之间的数据共享和持久化。文章来源地址https://www.toymoban.com/news/detail-490483.html

到了这里,关于(四)Docker进阶网络模式与特权指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云上攻防--云原生&&Docker逃逸--特权逃逸--危险挂载--漏洞逃逸

    Docker介绍 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker 容器与虚拟机类似,但二者在原理上不同

    2024年01月25日
    浏览(46)
  • Docker进阶:Docker网络与微服务项目发布

    💖The Begin💖点点关注,收藏不迷路💖 Docker是当今最流行的容器化平台之一,它提供了一个轻量级、可移植和可扩展的应用环境。 而在Docker中,网络是构建容器化应用的关键组成部分之一。本文将深入探讨Docker网络,构建高效、可扩展的应用容器化网络架构。 在 Docker 中,

    2024年02月09日
    浏览(38)
  • Docker_安装使用_容器镜像_Docker-compose_常用指令_网络配置

    相关概念 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题。 Docker解决依赖的兼容问题: Docker允

    2024年02月02日
    浏览(58)
  • Docker网络配置&网络模式

    Docker 的网络模式是一种定义容器如何在网络中通信的方式。Docker 提供了多种网络模式,每种模式都适用于不同的使用场景 互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP 地址在设计时就考虑到地址分配的层次特点,将每个

    2024年01月19日
    浏览(36)
  • RISC-V(2)——特权级及特权指令集

    目录 1.  特权级 2. 控制和状态寄存器(CSR) 2.1 分类  2.2 分析               一个 RISC-V 硬件线程( hart )是运行在某个特权级上的,这个特权级被编码到一个或者多个 CSR (control and status register, 控制和状态寄存器 )中的一种模式。         当前定义了四种特权级

    2024年02月10日
    浏览(44)
  • 【Docker】网络模式➕自定义网络

    接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihui\\\'s Code World ! !🥳🥳 一.Docker网络模式的介绍 二. 网桥模式【bridge】 1.查看网络模式 2.查看bridge信息 3.打开容器 4.外部访问 5.查看容器网络 三.主机模式【host】  四.使用网桥模式完成容器间的互相通信 1

    2024年01月17日
    浏览(40)
  • 【docker】网络模式管理

    目录 一、Docker网络实现原理 二、Docker的网络模式 1、host模式 1.1 host模式原理 1.2 host模式实操 2、Container模式 2.2 container模式实操 3、none模式 4、bridger模式 4.1 bridge模式的原理 4.2 bridge实操 5、overlay模式 6、自定义网络模式 6.1 为什么需要自定义网络模式? 6.2 创建自定义网络 6

    2024年02月02日
    浏览(50)
  • Docker网络模式详解

    ocker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是 每个容器的默认网关。 因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直

    2023年04月24日
    浏览(31)
  • docker的网络模式

    Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是 每个容器的默认网关。 因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-I

    2023年04月13日
    浏览(31)
  • 〖Docker指南⑥〗快速入门Docker的五种网络模式

    Docker 使用Linux bridge 技术,当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 接下来就要为容器分配IP了,

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包