Docker 数据管理、容器互联、网络与资源控制

一、docker数据管理

管理 Docker 容器中数据主要有两种方式:数据卷(Data volumes)和数据卷容器(Datavolumes containers)。

1、数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立即可见,并且更新数据不会影响镜像,从而实现在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作

格式:docker run -d -v 宿主机绝对路径:容器绝对路径[:ro]  镜像名:标签  [容器启动命令]

#将宿主机目标|文件挂载到容器的数据卷

2、数据卷容器

如果需要在容器之问共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

格式:

docker run -d  -v  容器绝对路径  镜像名:标签  [容器启动命令] 

#创建数据卷容器的数据卷

docker run -d  --volumes-from 数据卷容器名 镜像名:标签  [容器启动命令]                     

#共享数据卷容器的数据卷

二、docker容器互联

默认情况下docker容器重新创建后,对应的容器IP地址可能会改变,这样如果两个容器之间通信就会变得非常麻烦,每次都要修改通信的IP地址。容器互联是通过容器的名称在容器问建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

docker run -d --name 容器名 --link 目标容器名:连接别名 镜像名:标签  [容器启动命令]

#可实现在容器内通过目标容器名或连接别名与目标容器通信

三、docker网络

1、端口映射

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

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器

格式:

docker run -d --name 容器名 -P 镜像名:标签  [容器启动命令]                                              

#使用从32768开始的随机端口映射容器


docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名:标签  [容器启动命令]            

 #使用指定的宿主机端口映射容器

2、查看容器的输出和日志信息

只会显示容器pid=1的主进程日志

格式:docker logs 容器的ID|名称

3、docker 的网络模式(重点)

①docker网络模式概述

  • bridge

docker的默认网络模式。使用此模式的每个容器都有独立的网络命名空间namespace,即每个容器都有独立的IP、端口范围(每个容器可以用同一个端口)、路由、iptables规则等网络资源。
命令:docker run [--network=bridge] ....

  • host

容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其它使用host模式的容器不能用同一个端口)、路由、iptables规则等网络资源。
命令:docker run --network=host ....

  • container

和指定已存在的容器共享网络namespace,即这两个容器使用同一个IP、端口范围(容器与指定的容器不能用同一个端口)、路由、iptables规则等网络资源。
命令:docker run --network=container:容器名|容器ID ....

  • none

每个容器都有独立的网络namespace,但是容器没有自己的eth0网卡、IP、端口等,只有lo网卡。
命令:docker run --network=none ....

  • 自定义网络

可以用来自定义创建一个网段、网桥、网络模式,从而可以创建容器时自定义容器IP
docker network create --subnet 自定义网段 --opt "com.docker.network.bridge.name"="自定义网桥名"  自定义网络模式名
命令:docker run --network 自定义网络模式名  --ip 自定义容器IP ....

②container

③自定义网络

创建自定义网络:

格式:

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

再使用指定IP运行docker:

格式:

docker run -itd --name 自定义容器名 --network 自定义网络模式名 --ip 自定义IP centos:7 /bin/bash

四、docker资源控制

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

1、CPU 资源控制

①设置CPU使用率上限

使用 --cpu-period 即可设置调度周期,使用 --cpu-quota 即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period 的数值范围是 1000~1000000。而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000。

格式:

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

针对已存在的容器:
修改 /sys/fs/cgroup/cpu/docker/容器ID/ 目录下的 cpu.cfs_period_us(单个CPU调度周期时间)  cpu.cfs_quota_us(容器进程能够使用的最大CPU时间)  文件的值

②设置CPU资源占用比(只能在多个容器同时运行且CPU资源紧张时生效)

docker 通过 --cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数

格式:

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

分别进入容器,进行压力测试:

yum install -y epel-release

yum install -y stress

stress -c 2

③设置容器绑定指定的CPU

先分配虚拟机4个CPU核数

docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash

进入容器,进行压力测试

yum install -y epel-release

yum install stress -y

stress -c 4

退出容器,执行 top 命令再按 1 查看CPU使用情况。

2、对内存使用的限制

使用-m选项用于限制容器可以使用的最大内存,系统默认不限制容器的内存使用

docker run -id --name c3 -m 512m centos:7 /bin/bash

使用 --memory-swap选项限制可用的 swap 大小,--memory-swap的值表示容器可用内存和可用swap的总和,--memory-swap 是必须要与 -m一起使用的

格式:

docker run -m 内存值  --memory-swap 内存和swap的总值
                                    设置 0 或 不设置,表示swap为内存的2倍
                                    设置 -1,表示不限制swap的值,宿主机有多少容器即可使用多少
                                    设置 与 -m 一样的值,表示不使用swap

3、对磁盘IO配额控制(blkio)的限制

格式:

docker run --device-read-bps    磁盘设备文件路径:速率           

#限制容器在某个磁盘上读的速度
docker run --device-write-bps   磁盘设备文件路径:速率                  

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

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

#限制容器在某个磁盘上写的次数

创建容器,并限制写速度 

docker run -id --name c5 --device-write-bps /dev/sda:1M centos:7 /bin/bash

通过dd来验证写速度

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct #添加oflag参数以规避掉文件系统cache(缓存)

4、清理docker占用的磁盘空间

docker system prune -a

可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

seata 分布式

一、下载安装seata 已经下载好的朋友可以跳过这个步骤。这里下载的是seata1.6.1这个版本。 1、进入seata官网 地址: https://seata.io/zh-cn/index.html 2、进入下载 3、点击下载地址 下载地址: https://github.com/seata/seata 二、配置seata 进入c…

​ PaddleHub 首页图像 - 文字识别chinese_ocr_db_crnn_server​

PaddleHub 便捷地获取PaddlePaddle生态下的预训练模型,完成模型的管理和一键预测。配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用 零基础快速开始WindowsLinuxMac Paddle…

MacOS安装反编译工具JD-GUI以及解决无法打开的问题

目录 一.下载地址 二.安装 三.问题 四.解决办法 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 4.保存后再次打开即可 一.下载地址 Java Decompiler 二.安装 将下载下来的 jd-gui-osx-1.6.6.tar 解压,然后将 JD-GUI.a…

驾驭AI绘画:《AI魔法绘画》带你秒变顶级画手!

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

C++笔试强训选择题7

1.对于以下代码,说法正确的是() char * p new char[100];A p 和 new出来的内存都在栈上 B p 和 new出来的内存都在堆上 C p在栈上 new出来的在堆上 D p在堆上 new出来的在栈上 new默认情况下申请的空间在堆上 2. 类模板的使用…

微信小程序~上推加载更多组件

本组件使用的是TaroReact 实现的 ,具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

Ubuntu 20.04 Server 使用命令行设置 IP 地址

1、编辑 /etc/netplan/ 目录下的配置文件00-installer-config.yaml (修改之前,把原来的文件备份) 按照对应的配置进行修改IP地址和网关 2、运行命令使其生效 sudo netplan apply 修改完成后,永久有效。重启后配置不会丢失

ElasticSearch重建/创建/删除索引操作 - 第501篇

历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 E…

ROS学习笔记11——ROS中的重名问题

一、ros功能包重名——ros工作空间覆盖 功能包重名时,会按照 ROS_PACKAGE_PATH 查找,在前的会优先执行。ROS 会解析 .bashrc 文件,并生成 ROS_PACKAGE_PATH ROS包路径,即调用功能包的顺序,该变量中按照 .bashrc 中配置…

三、ElasticSearch集群搭建实战

本篇ES集群搭建主要是在Linux VM上,未使用Docker方式, ES版本为7.10 ,选择7.10版本原因可以看往期文章介绍。 一、ElasticSearch集群搭建须知 JVM设置 Elasticsearch是基于Java运行的,es7.10可以使用jdk1.8 ~ jdk11之间的版本,更高版本还没…

【JVM】运行时数据区域,内存如何分配和对象在内存中的组成

目录 一.运行时数据区域 1.线程独享 2.线程共享 二.内存如何分配 1.指针碰撞法 2.空闲列表法 3.TLAB 三.对象在内存中的组成 ​编辑1.对象头 2.实例数据 3.对齐填充 一.运行时数据区域 1.线程独享 (1)栈 虚拟机栈:每个 Java 方法在…

c++入门语法—————引用,内联函数,auto关键字,基于范围的for循环,nullptr

文章目录 一.引用1.引例2.注意事项3.应用场景1.做参数(a:输出型参数b:内容较大参数)2.做返回值(a:修改返回值,b:减少拷贝) 4.引用和指针的区别 二.内联函数1.为什么有内联函数2.用法和底层3.特性 三.auto关键字1.基础示…

计网Lesson11 - 虚拟机网络环境及socket概述

文章目录 虚拟机的简述socket概述 虚拟机的简述 放张图在这,根本没明白是啥对啥,以后学了Linux再来吧 😦 socket概述 s o c k e t socket socket 是一种用于应用层的用户态与应用层以下的内核态交互的工具,本意为“插座”。 也就是…

聚醚醚酮(Polyether Ether Ketone)PEEK在粘接使用时使用UV胶水的优势有哪些?要注意哪些事项?

使用UV胶水在聚醚醚酮(Polyether Ether Ketone,PEEK)上进行粘接可能具有一些优势,但同时也需要注意一些事项。以下是使用UV胶水的优势和需要考虑的事项: 优势: 1.快速固化: UV胶水通常具有快速…

来聊聊大厂面试题:求Java对象的大小

写在文章开头 日常使用Java进行业务开发时,我们基本不关心一个Java对象的大小,所以经常因为错误的估算导致大量的内存空间在无形之间被浪费了,所以今天笔者就基于这篇文章来聊聊一个Java对象的大小。 你好,我叫sharkchili&#x…

部分地级市收入泰尔指数数据,shp/excel格式,附数据可视化图及计算公式

泰尔指数的计算方式:分别计算城镇和农村收入份额与人口份额之比的自然对数,然后再以城乡收入份额作为权数,进行加权平均求和。 数据名称: 部分地级市收入泰尔指数数据 数据格式: Shp、excel 数据时间: 2010-2019年 数据几何类型: 面 数…

c++学习记录 多态—案例2—电脑组装

#include<iostream> using namespace std;//抽象不同的零件//抽象的cpu类 class Cpu { public://抽象的计算函数virtual void calculate() 0; };//抽象的显卡类 class VideoCard { public://抽象的显示函数virtual void display() 0; };//抽象的内存条类 class Memory …

【蓝桥杯日记】复盘篇二:分支结构

前言 本篇笔记主要进行复盘的内容是分支结构&#xff0c;通过学习分支结构从而更好巩固之前所学的内容。 目录 前言 目录 &#x1f34a;1.数的性质 分析&#xff1a; 知识点&#xff1a; &#x1f345;2.闰年判断 说明/提示 分析&#xff1a; 知识点&#xff1a; &am…

网络体系结构 和网络原理之UDP和TCP

目录 网络分层 一. 应用层 http协议 二. 传输层 1. 介绍 2.UDP协议 (1)组成 (2)细节 3.TCP协议 (1)特性如下链接&#xff1a; (2)组成 (3)特点 三. 网络层 四. 数据链路层 1.介绍 2.以太网协议 3.mac地址和ip地址 五. 物理层 DNS 网络分层 一. 应用层 应用程序 现成的…

dfs专题 P1255 数楼梯——洛谷(疑问)

题目描述 楼梯有 &#xfffd;N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 输入输出样例 输入 #1复制 4 输出 #1复制…