【Docker从入门到入土 2】Docker数据管理、网络通信和网络模式 1.0

news2024/12/24 20:25:51

Part2

  • 一、Docker网络模式(面试高频)
    • 1.1 Docker 网络实现原理
    • 1.2 host模式
    • 1.3 container模式
    • 1.4 none模式
    • 1.5 bridge模式
    • 1.6 自定义网络
  • 二、Docker网络通信
    • 2.1 端口映射
    • 2.2 容器互联
  • 三、Docker资源控制
    • 3.1 Cgroup简介
    • 3.2 CPU资源控制
      • 3.2.1 设置CPU使用率上限
      • 3.2.2设置CPU资源占用比
      • 3.2.3 设置容器绑定指定的CPU
    • 3.3 对内存使用的限制
    • 3.4 对biko(磁盘I/O配额控制)的限制
  • 四、Docker的数据管理
    • 4.1 数据卷
    • 4.2 数据卷容器

一、Docker网络模式(面试高频)

1.1 Docker 网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。

在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器

如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

1.2 host模式

容器和宿主机共享网络命名空间,即容器和宿主机使用同一个IP、端口范围(容器与宿主机/同模式的容器不可以相同的端口号)、路由、iptables规则等

docker run --network=host

1.3 container模式

和指定且已存在的容器共享网络命名空间,即两个使用同一个IP、端口范围(容器与宿主机/同模式的容器不可以相同的端口号)、路由、iptables规则等

docker run --network=container:指定的容器ID|容器名

1.4 none模式

每个容器都有独立的网络命名空间但是容器没有eth0网卡、IP、端口等,只有lo网卡

docker run --network=none

1.5 bridge模式

docker的默认网络模式

此模式的每个容器都要独立的网络命名空间,即每个容器都有独立的IP、端口范围(每个容器可以相同的端口号)、路由、iptables规则等

docker run [--network=bridge]

1.6 自定义网络

可以自定义创建一个网段、网桥、网络模式,从而可自定义容器IP来创建容器

docker network create --subnet 新网段 --opt "com.docker.network.bridge.name"="新网桥名" 新网络模式名

docker run --network 新网络模式名 --ip 自定义IP

二、Docker网络通信

2.1 端口映射

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务。

端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

docker run  -d  -P       #使用从32768开始的随机端口映射容器

docker run -p 宿主机端口:容器端点       #指定宿主机端口映射容器
docker run -d --name test1 -P nginx					#随机映射端口(从32768开始)

docker run -d --name test2 -p 43000:80 nginx		#指定映射端口

docker ps -a

在这里插入图片描述

#浏览器访问
http://192.168.2.106:43000
http://192.168.2.106:49170

在这里插入图片描述

#查看容器的输出和日志信息
docker logs 容器的ID/名称

在这里插入图片描述

2.2 容器互联

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

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

#创建并运行源容器取名web1
docker run -itd -P --name web1 centos:7 /bin/bash	
	
#创建并运行接收容器取名web2,使用--link选项指定连接容器以实现容器互联
docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash			
#--link 容器名:连接的别名

在这里插入图片描述

#进web2 容器, ping web1
docker exec -it web2 bash
ping web1

在这里插入图片描述

三、Docker资源控制

3.1 Cgroup简介

Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。

Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、磁盘 IO 等等) 的机制,被 LXC、docker 等很多项目用于实现进程资源控制。

Cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理是通过该功能来实现的。

3.2 CPU资源控制

3.2.1 设置CPU使用率上限

设置单个容器进程能够使用的CPU使用率上限

docker run --cpu-period 单个CPU调度周期时间(1000~1000000) 
           --cpu-quota 容器进程能够使用的最大CPU时间(>=1000)

3.2.2设置CPU资源占用比

设置多个容器时才有效。

docker run --cpu-shares 容器进程最大占用的份额(值为1024的倍数)

3.2.3 设置容器绑定指定的CPU

docker run --cpuset-cpus CPUID1[,CPUID2...]

3.3 对内存使用的限制

设置容器能够使用的内存和swap的大小
docker run -m 内存大小 --memory-swap 内存和swap的总大小
                                     设置 -1,代表不限制swap的大小,宿主机有多少容器即可用多少
									 设置 0或者不设置,代表swap为内存的2倍
									 设置 与 -m相同的值,代表不使用swap

3.4 对biko(磁盘I/O配额控制)的限制

docker run --device-read-bps   磁盘设备文件路径:速率           限制容器在某个磁盘上读的速率
           --device-write-bps  磁盘设备文件路径:速率           限制容器在某个磁盘上写的速率
		   --device-read-iops  磁盘设备文件路径:次数           限制容器在某个磁盘上读的次数
		   --device-write-iops 磁盘设备文件路径:次数           限制容器在某个磁盘上写的次数

四、Docker的数据管理

管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)数据卷容器(DataVolumes Containers)

4.1 数据卷

docker run -v 挂载目录:数据卷(容器挂载点) 

数据卷是一个供容器使用的特殊目录,位于容器中。

将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。

数据卷的使用类似于 Linux 下对目录进行的 mount 操作。

docker pull centos:7

注意:宿主机本地目录的路径必须是使用绝对路径

如果路径不存在,Docker会自动创建相应的路径。

#宿主机目录/var/www 挂载到容器中的/data1。
docker run -v /var/www:/data1 --name web3 -it centos:7 /bin/bash			#-v 选项可以在容器内创建数据卷
ls
echo "this is web1" > /data1/abc.txt
exit

在这里插入图片描述

#返回宿主机进行查看
cat  /var/www/abc.txt

在这里插入图片描述

4.2 数据卷容器

docker run -it --volumes-from 数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。

数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用

#创建一个容器作为数据卷容器
docker run --name web4 -v /data1 -v /data2 -it centos:7 /bin/bash
echo "this is web4" > /data1/abc.txt
echo "THIS IS WEB4" > /data2/ABC.txt
#使用 --volumes-from 来挂载 web4 容器中的数据卷到新的容器
docker run -it --volumes-from web4 --name web5 centos:7 /bin/bash
cat /data1/abc.txt
cat /data2/ABC.txt

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA高级教程-Java Map(6)

目录 6、Map的使用 6、Map的使用 package Map01;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** Map接口的使用*/ public class Demo01_HashMap {public static void main(String[] args) {Map<String,String> mapnew HashMap<>();ma…

黔院长 | 不忘初心在逆境中前行!

随着我国经济不断发展进步&#xff0c;以及人口老龄化程度的加深&#xff0c;加上自然环境质量的下降&#xff0c;人们越来越关注和重视自己的健康问题。据世界卫生组织相关数据显示&#xff0c;目前我国的亚健康率已经高达95%&#xff01;健康发展刻不容缓&#xff01; 国家政…

strlen函数

文章目录 strlen函数模拟实现&#xff1a; strlen函数 strlen函数是用来计算字符串长度的&#xff0c;不包括‘\0’ 使用&#xff1a; #include<stdio.h> #include<string.h>int main() {char arr[] "abcdef";int len strlen(arr);printf("%d\n…

Java基础(第一期):IDEA的下载和安装(步骤图) 项目结构的介绍 项目、模块、类的创建。第一个代码的实现

文章目录 IDEA1.1 IDEA概述1.2 IDEA的下载和安装1.2.1 下载1.2.2 安装 1.3 IDEA中层级结构介绍1.3.1 结构分类1.3.2 结构介绍project&#xff08;项目、工程&#xff09;module&#xff08;模块&#xff09;package&#xff08;包&#xff09;class&#xff08;类&#xff09; …

vue3 使用 elementUi: ./lib/theme-chalk/index.css is not exported from package

目录 1. 在 vue3 中使用 element-ui2. 如果启动报错&#xff1a;Module not found: Error: Package path ./lib/theme-chalk/index.css is not exported from package 1. 在 vue3 中使用 element-ui 在 vue3 中使用 element-ui&#xff0c;我们的流程一般是这样的&#xff1a;…

17 Transformer 的解码器(Decoders)——我要生成一个又一个单词

Transformer 编码器 编码器在干吗&#xff1a;词向量、图片向量&#xff0c;总而言之&#xff0c;编码器就是让计算机能够更合理地&#xff08;不确定性的&#xff09;认识人类世界客观存在的一些东西 Transformer 解码器 解码器会接收编码器生成的词向量&#xff0c;然后通…

Go并发编程之二

一、前言 前一篇 Go并发编程之一 主要介绍了如何通过go语句启动协程&#xff08;goroutine&#xff09;以及协程调度的不确定性&#xff0c;这一篇我们重点来介绍一下协程中另外一个重要概念channel&#xff0c;记住第一句话&#xff1a; goroutine之间不是通过共享内存来通信…

JUC高并发容器-CopyOnWriteArrayList

CopyOnWriteArrayList JUC高并发容器线程安全的同步容器类什么是高并发容器&#xff1f;CopyOnWriteArrayList JUC高并发容器 线程安全的同步容器类 Java同步容器类通过Synchronized(内置锁)来实现同步的容器&#xff0c;比如Vector、HashTable以及SynchronizedList等容器。线…

react封装一个简单的upload组件(待完善)

目录 react封装一个简单的upload组件component / uploadImg / uploadImg.jsx使用效果 react封装一个简单的upload组件 component / uploadImg / uploadImg.jsx import React, { useState } from react; import { LoadingOutlined, PlusOutlined } from ant-design/icons; imp…

【源码】C/C++运动会计分系统 期末设计源码

文章目录 题目介绍功能源码效果展示带报告&#xff08;内容&#xff09; 题目介绍 使用语言&#xff1a; 两个版本都会发&#xff1a; 版本1&#xff1a;C语言 版本2&#xff1a; C 代码量&#xff1a; 500 题目介绍&#xff1a; 要求&#xff1a;初始化输入&#xff1a;N-参赛…

C++ 中的模型预测路径积分 (MPPI) 控制

一、说明 模型预测路径积分控制&#xff08;MPPI&#xff09;是一种基于采样的模型预测控制算法。是MPC控制模型的延申和拓宽&#xff0c;要了解MPPI需要先理解MPC&#xff0c;参见文章&#xff1a;MPC预测控制概述和C 中的模型库-CSDN博客 二、模型预测路径积分 (MPPI) 控制 模…

【小白专用23.10.22 已验证】windows 11 安装PHP8.2 +Apache2.4

环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php8apache2_4.dll这个文件&#xff1b;如果使用Apache作为服务器…

Casbin实战经验大揭秘:教育培训领域的创新实践和高效优化策略

策略描述语言&#xff08;论文&#xff09; 摘要: 为了保护云资源的安全&#xff0c;防止数据泄露和非授权访问&#xff0c;必须对云平台的资源访问实施访问控制。然而&#xff0c;目前主流云平台通常采用自己的安全策略语言和访问控制机制&#xff0c;从而造成两个问题&#x…

Jenkins简介及安装配置详解:开启持续集成之旅

目录 一、Jenkins介绍1.1 持续集成1.2 Jenkins持续集成的过程&#xff08;传统方式与自动化部署&#xff09; 二、环境搭建1、准备工作2、WEB发布服务器环境搭建3、SVN服务器环境搭建4、Jenkins环境搭建 一、Jenkins介绍 Jenkins是一个开源的、用Java编写的持续集成和持续交付&…

Defender Antivirus占用资源怎么禁止

前言 有时Defender Antivirus 突然磁盘IO很高。导致机器卡得很&#xff0c;开发代码很不方便&#xff0c;本文就介绍如何禁用这个服务。2f089809-2c6f-4fb7-86f5-8b5cbca8bd0d 操作 下载Defender Control https://www.sordum.org/9480/defender-control-v2-1/ 这是当前的最…

Adobe Photoshop 基本操作

PS快捷键 图层 选择图层 Ctrl T&#xff1a;可以对图层的大小和位置进行调整 填充图层 MAC: AltBackspace (前景) or CtrlBackspace (背景) WINDOWS: AltDelete (前景) or CtrlDelete (背景) 快速将图层填充为前景色或背景色 平面化图层&#xff08;盖印图层&#xff09…

uniapp实现登录组件之外区域置灰并引导登录

实现需求 每个页面需要根据用户是否登录决定是否显示登陆组件,登录组件半屏底部显示,登录组件之外区域置灰,功能按钮点击之后引导提示登录.页面效果如下: 实现思路说明 设置登录组件背景颜色为灰色,将页面分成登录区域(底部)和非登陆区域(上面灰色显示部分), 置灰区域添加…

嵌入式学习笔记(61)位操作符

2.1.1.位与& (1)注意&#xff1a;位与符号是一个&&#xff0c;两个&&是逻辑与。 (2)真值表&#xff1a;1&00 1&11 0&00 0&10 (3)从真值表可以看出&#xff1a;位与操作的特点是&#xff0c;只有1和1位于结果为1&#xff0c;其余全是0. (4)…

【Java】Java 17 新特性

Java 17 新特性概览 1. Java 17 简介2. Java 17 新特性类型推断 - 新的 var 关键字垃圾回收器改进JEP 356 增强的伪随机数生成器&#xff08;1&#xff09;提供了一个新接口 RandomGenerator&#xff08;2&#xff09;提供了一个新类 RandomGeneratorFactory&#xff08;3&…

Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法

文章目录 问题有问题的源码 问题原因问题分析Context的含义BuildContext的作用特殊情况 解决方法 问题 Flutter开发中遇到Don’t use BuildContext’s across async gaps警告 有问题的源码 if (await databaseHelper.isDataExist(task.title)) {showDialog(context: context,…