docker 容器管理

文章目录

  • docker 容器管理
    • 容器基础
      • 容器概念
      • 可写的容器层
      • 容器的磁盘大小
      • 写时拷贝
    • 容器操作
      • 容器创建和运行
      • 容器的启停
      • 查看容器信息
      • 进入容器操作
      • 删除容器
      • 基于容器创建镜像
    • 容器限制
      • 限制容器内存
      • 限制容器CPU
      • 限制容器块IO带宽
      • 资源限制的实现机制
      • 动态修改容器配置
    • 容器监控
      • 容器监控命令
      • cAdvisor 监控容器
    • 容器日志
      • 哪里的日志
      • 命令查看日志
      • 配置日志驱动

docker 容器管理

容器基础

容器概念

基于 docker 的虚拟化应用以容器的形式来部署和运行

container

由 docker 镜像创建的应用程序运行实例

  • 镜像是静态的定义
  • 容器是镜像运行的实体
  • 容器实质也是进程,但与主机上的其他进程不一样,容器进程属于自己独立的名称空间内,运行在一个隔离的环境中,这点和虚拟机是不一样的

容器的基本信息

docker ps :显示当前主机正在运行的容器列表

菜单说明
CONTAINER ID容器 ID(容器的唯一标识)
IMAGE容器所用镜像的名称
COMMAND启动容器时的命令
CREATED容器的创建时间
STATUS容器运行的状态(up运行中,EXITED已停止)
PORTS容器对外暴露的端口号
NAMES容器名称(ID不好记,用这个也可以,不设置默认就会生成一个NAMES)

在这里插入图片描述

可写的容器层

容器=只读的镜像+可写的容器层

在这里插入图片描述

容器的磁盘大小

docker ps -s 可显示容器的大小

在这里插入图片描述

以上不包括:

  1. 容器的日志文件大小
  2. 容器的卷和绑定挂载
  3. 容器配置文件的大小
  4. 写入磁盘的内存大小

写时拷贝

Copy-on-Write

简称:CoW,又被叫做写时复制,是一个最高效率的文件共享和复制策略

  • 文件、目录位于镜像中的底层,其他层需要读取,只需使用现有的文件即可,
  • 其他层需要修改,文件会被复制到该层并修改

优势

  • 共享有助于减少镜像大小
  • 复制使容器效率更高:需要修改文件,从镜像各层搜索要修改的文件,从最高到最低,找到文件后将被添加到缓存中进行操作,对找到的文件复制到容器的可写层,任何修改只会修改这个可写层的文件,并且底层的只读的源文件对于容器是不可见的(从上往下俯瞰,看到的总是可写层的那个文件)

容器操作

容器创建和运行

docker create:创建容器,但是不会运行

docker run:创建并运行容器

命令语法:docker run [选项] 使用的镜像 [启动命令] [启动命令的参数]

  • docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用的选项

选项(短格式为主)说明
-a连接到标准输入、输出和标准错误,(现在基本不用了)
-c设置容器 CPU 权重
-d指定容器运行于后台
–device添加主机设备到容器,相当于设备直通(用的也少)
–dns指定容器的 DNS 地址
–dns-search指定容器的DNS搜索域名,写入容器的 /etc/resolv.conf文件中
–entrypoint覆盖镜像的入口点
-e指定容器的环境变量
–env-file指定容器的环境变量文件,文件格式为一行一个环境变量
–expose指定容器对外的端口暴露
-h指定容器的主机名
-m设置容器内存上限
–name指定容器的名称
–net设置容器的网络
–privileged指定容器为特权容器,拥有所有的权限
–restart指定容器停止后的重启策略
–rm指定容器停止后自动删除容器
-t为容器分配TTY设备支持终端登陆
-v为容器挂载存储卷,将其挂载到容器的某个目录下
–volumes-from为容器挂载其他容器上的卷
-w指定容器的工作目录
-p指定主机端口和容器端口的映射关系

容器创建的一般流程

  1. 检查本地是否存在镜像,如果不存在,就去对应的注册中心自动拉取
  2. 基于镜像创建一个容器并且启动它
  3. 为容器分配一个文件系统,并在这个只读层的顶部新增一个容器可写层
  4. 从主机配置的网桥接口中分配一个虚拟接口桥接到容器
  5. 从网桥的地址分配一个容器IP地址
  6. 执行用户指定的应用程序
  7. 看启动结果…

容器的自动启动策略

–restart

  • no:容器退出时不自动重启,默认设置
  • on-failure:5:容器以非0状态码退出时重启,可以指定尝试重启容器的次数
  • always:不管什么状态退出,无限次数得重启容器
  • unless-stopped:不管什么状态退出,都始终重启容器,如果容器之前就是停止状态,则不会尝试启动它

容器退出状态

125:Docker 守护进程本身的错误

126:无法调用容器命令

127:容器命令不存在

容器的启停

启动:docker start container1 container2

停止:docker stop container1 container2

重启:docker restart container1 container2

强制停止:docker kill container1 container2

暂停:docker pause container1 container2

恢复:docker unpause container1 container2

阻塞:docker wait container1 container2

查看容器信息

显示容器列表

docker ps [选项]

  • -a:显示所有容器,包括停止和未运行的

  • -f:根据条件过滤容器

  • –format:自定义格式输出

  • -l:显示最近创建的容器

  • -n:显示最近创建的n个容器

  • –no-trunc:显示完整的容器信息

  • -q:静默显示,只显示ID

  • -s:显示总的文件大小

查看容器详细信息

docker inspect 容器名/ID

  • 支持使用 -f 选项来获取特定的内容

在这里插入图片描述

进入容器操作

docker exec -it 容器ID bash/sh

在这里插入图片描述

删除容器

docker rm -f 容器ID

在这里插入图片描述

基于容器创建镜像

docker commit 容器ID 镜像信息

实现原理

基于容器创建镜像:基于源镜像层数内容+容器可写层内容

示例

在这里插入图片描述

容器限制

限制容器内存

  • 物理内存
  • 交换内存

用户内存限制

### 设置内存限制并取消交换内存限制(较多使用交换)
-m 300M --memory-swap -1

### 设置内存限制
-m 300M

### 同时设置
-m 300M --memory-swap 1G

内核内存限制

### 无法设置对交换的限制,被用户内存限制的上下文中限制内核内存
-m 500M --kernel-memory 50M

### 只设置内核内存也可
--kernel-memory 50M

内存预留

### 内存软限制,允许更大的内存共享,内存预留始终低于硬限制,默认不做软限制
-m 500M --memory-reservation 200M # 当容器消耗内存超过200小于500时候,下一次系统回收将尝试降低到200以下

禁止杀死容器的进程

### 内存溢出,内核会杀死容器中的进程,--oom-kill-disable配合-m使用最佳
-m 100M --oom-kill-disable

交换限制

### --memory-swappiness 百分越大,表示积极使用交换空间,越小表示积极使用物理内存空间,0的时候,最大限度使用物理内存,100则相反
--memory-swappiness 0 ## 关闭内存页面交换

限制容器CPU

默认情况下,所有容器平等使用主机的 CPU 并且没有限制

CPU 份额限制

  • 默认所有容器都可以获得相同比例的 CPU 周期
  • 可以更改这个设置,让一个容器相对于其他容器使用的 CPU 份额权重
### 默认值就是1024 ,设置为0,相当于1024, (这块还不是很懂)
-c 1024

CPU 资源限制

  • –cpus:设置容器可以使用的可用 CPU 资源,浮点数,默认0.000,表示不受限制,如果有2个CPU,1.5就表示使用1个半的CPU

指定 CPU 核心

  • –cpuset-cpus:限制容器使用特定的CPU
--cpuset-cpus="0-2"/--cpuset-cpus="0,1,2"

限制容器块IO带宽

磁盘的读写限制

  • 设置权重:只对直接IO,范围10-1000
  • 限制 bit/s:每秒读写的字节数 KM MB GM
  • 限制 io/s:每秒 io 的次数,正整数
### 设置权重,也可以指定设备
--blkio-weight 300
--blkio-weight-device "/dev/sda:200"

### 设置限制字节数大小
--device-read-bps /dev/sda:1mb

### 设置iops大小
--device-read-iops /dev/sda:1000
--device-write-iops /dev/sda:1000

资源限制的实现机制

前面就知道是通过 Cgroup 内核底层技术实现的

  • 对应的子系统来实现
    • 内存子系统
    • CPU子系统
    • blkio子系统

示例

docker run -d -m 100M -c 512  busybox sleep 3000

在这里插入图片描述

动态修改容器配置

docker update 选项 容器ID (好像不咋常用这个)

容器监控

容器监控命令

  1. docker top 容器ID

在这里插入图片描述

  1. 容器系统资源使用情况
### 持续输出
docker stats

### 显示所有的
docker stats -a

### 显示完整信息
docker stats --no-trunc

### 输出当前状态
docker stats --no-stream

在这里插入图片描述

cAdvisor 监控容器

  • 这是谷歌提供的工具
  • 可以分析正在运行的容器的资源占比情况和性能指标
  • 图形化显示、易入门
  • 它是一个运行时的守护进程,负责收集、聚合、处理,可以监测到资源隔离参数、历史资源使用和网络统计数据
  • 可以原生安装,也可以 docker 容器运行

作为容器运行的安装方式

docker run --privileged -v /:/rootfs:ro \
	-v /var/run:/var/run:rw \
	-v /sys:/sys:ro \
	-v /var/lib/docker/:/var/lib/docker:ro \
	-p 8080:8080 --detach --name=cAdvisor \
	google/cadvisor:latest 

在这里插入图片描述

指标功能展示

浏览器访问 8080 端口即可访问,指标说明

在这里插入图片描述

【Docker Containers】进入容器信息页面展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

容器日志

哪里的日志

我猜想是:容器启动命令后,产生的日志

验证一下:符合预期

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

命令查看日志

docker logs 选项 容器ID

选项说明
–details显示详细的日志信息
-f持续输出日志,跟踪日志
–since显示某个开始时间到当前的所有日志
–tail 10仅显示最新的N (10)条日志
-t显示时间戳
–until显示到某个截止时间的所有日志

在这里插入图片描述

配置日志驱动

--log-driver 指定

支持配置日志驱动使日志重定向

  • 日志发送到标准输出设备和标准错误设备时默认的日志行为
  • 提供多种日志机制从运行的容器中提取日志,这些机制也叫日志驱动(logging driver)
    • 默认 json-file
日志驱动类型说明
none禁用容器日志,docker logs 不会任何输出
json-file日志保存在json文件中,docker负责格式化输出到标准设备
syslog日志消息写入syslog工具中,前提是 syslog 守护进程要在主机上运行
journald日志消息写入journald,前提也是一样
gelf日志消息写入日志文件收集系统(logstash)的GELF终端
fluentd日志消息写入fluentd工具中,前提是 fluentd守护进程要在主机上运行
splunk日志消息写入使用时间HTTP收集器的 splunk

示例

在这里插入图片描述

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

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

相关文章

热门应用滥用苹果 iPhone 推送通知,暗中窃取用户数据

移动研究人员 Tommy Mysk 近日揭露,部分热门应用利用 iPhone 推送通知功能秘密发送用户数据,这引发了用户隐私安全担忧。 许多 iOS 应用程序正在使用由推送通知触发的后台进程来收集设备的用户数据,从而有可能创建用于跟踪的指纹档案。 Mys…

【misc | CTF】攻防世界 2017_Dating_in_Singapore

天命:这次终于碰到了算是真正的misc题目了 下载附件,打开是PDF,我一开始以为是flag隐写在PDF里面了 虽然也不奇怪,应该是可以的,毕竟PDF有xss漏洞也是可以的 言归正传,打开PDF 看着新加坡的日历&#xff…

机器学习系列15:通过t-SNE可视化高维数据

t-SNE 的全称是 t-distributed stochastic neighbor embedding(t-分布随机领域嵌入),这是一种非线性降维技术。而 PCA 和 LDA 是线性的降维技术。 t-SNE 通常用来在二维或者三维空间中可视化复杂数据集。 简单来说,t-SNE 试图发…

idea中Spring项目yml文件注释中文乱码问题

idea中spring项目yml文件中文乱码问题,如图: 当出现这种情况一般就是idae的配置问题,解决起来也是非常简单的。 按下面操作即可,如图: 解决方式: 1.进入设置 2.找到File Encodings,然后再将编…

PWN 常用工具-补充

目录 pwndbg 如何加载文件 如何运行到Main函数停止 如何查看程序的内存布局 查看内存地址存储的值 如何查看某个地址存储的指令 搜索字符串 打印 调试相关 断点相关 查看栈内数据 查看栈调用顺序 从程序回到gdb 修改内存中的值 file 可执行文件特征 动态链接文…

elementUI的el-select传递item对象或其他参数的2种方法

方法1 :value“item” 绑定对象 只要:value绑定item对象就可以 value-key"value" 必须是item里的一个属性&#xff0c;绑定值为对象类型时必填 <el-select v-model"value" placeholder"请选择" value-key"value" change"cha…

Day02-数据类型和运算符(基本数据类型转换,赋值运算符,算术运算符,关系运算符,逻辑运算符,条件运算符,位运算符,赋值运算符,运算符优先级,标点符号)

文章目录 Java基础语法学习目标1 基本数据类型转换&#xff08;Conversion&#xff09;&#xff08;掌握&#xff09;1.1 自动类型转换&#xff08;隐式类型转换&#xff09;1.2 强制类型转换&#xff08;显式类型转换&#xff09;1.3 基本数据类型与字符串类型的转换 2 运算符…

一起玩儿Proteus仿真(C51)——01. 仿真软件Proteus和开发软件Keil C51的安装

摘要&#xff1a;本文介绍仿真软件Proteus和开发软件Keil C51的安装 智能小车系列文章已经连续发布49期了。为了照顾更多读者的需求&#xff0c;从这周开始&#xff0c;新增加一个系列——Proteus仿真系列&#xff0c;这个系列的文章还是以一个个小的专题的形式&#xff0c;介绍…

数据结构(二)------单链表

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一.什么是链表二.链表的分类三.单链表的实现总结 前言 上一节&#xff0c;我们介绍了顺序表的实现与一些经典算法。 但是顺序表这个数据结构依然有不少缺陷&#xff1a; 1.顺序表指定…

(2)(2.9) Holybro Microhard P900无线电遥测设备

文章目录 前言 1 特点 2 规格 3 包装内包括 前言 Holybro Microhard Radio 集成了 microhard Pico 系列射频模块&#xff0c;能够在强大的拓扑结构中提供高性能无线串行通信&#xff0c;如点对点、点对多点和安全 Mesh&#xff08;P840 不提供 Mesh&#xff09;。 它采用跳…

多线程 之 静态代理

什么是静态代理&#xff1f; 静态代理是一种思想&#xff0c;找一个代理负责一些琐事&#xff0c;自己则专注于一件大事。 有哪些具体的表现&#xff1f; 在日常生活中做饭就是这样&#xff0c;会做饭的人需要做饭&#xff0c;那么其他的人就来帮他打杂&#xff0c;这样做饭的…

Sqli-labs-master第一关通关攻略

第一关基于错误的字符串/数字型注入 第一关打开&#xff0c;请输入id数值作为参数&#xff0c;那就输呗整个1&#xff0c;2&#xff0c;3看看效果 通过ID数值得变动&#xff0c;页面也随之发生变化&#xff0c;然后就是判断SQL语句是否拼接&#xff0c;是字符型还是数字型 输入…

DETR解读,将Transformer带入CV

论文出处 [2005.12872] End-to-End Object Detection with Transformers (arxiv.org) 一个前置知识 匈牙利算法&#xff1a;来源于二部图匹配&#xff0c;计算最小或最大匹配 算法操作&#xff1a;在n*n的矩阵中 减去行列最小值&#xff0c;更新矩阵&#xff08;此时行或者…

(蓝桥杯每日一题)求最长回文串

问题描述 给出一个长度为 n 的小写字符串&#xff0c;求一个最长的子串 S&#xff0c;满足SXY,X&#xff0c;Y>1&#xff0c;且X,Y 均为回文串。 输入格式 输入包括一行: 第一行是一个长度为 n 的小写字符串。 输出格式 输出包括一行&#xff1a; 一行一个整数&#xff0c;表…

Java设计模式-享元模式(12)

馆长准备了很多学习资料,其中包含java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具 等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关注…

Vue ECharts X轴 type为value的数据格式 + X轴固定间隔并向上取整十位数 - 附完整实例

echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档&#xff1a;Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&am…

Java: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

我们在平时练习的时候一般使用低版本的jdk来练习&#xff0c;以便了解不同版本jdk的区别&#xff0c;下面是我们练习中遇到的问题 >>> DefaultHttpClient mHttpClient new DefaultHttpClient(new BasicHttpParams()); ClientConnectionManager ccm mHttpClien…

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

目 录 项目搭建步骤确定node版本使用Vite创建Vue3项目规范目录结构配置环境修改Vite配置文件集成路由工具Vue Router集成状态管理工具Pinia集成CSS预编译器Sassvite-plugin-svg-icons图标组件集成UI框架Element Plus集成HTTP 请求工具 Axios 项目代码规范集成ESLint配置集成Pre…

docker环境搭建及其安装常用软件

centos安装docker Install Docker Engine on CentOS | Docker Docs 下载docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io…

Git学习,基础,安装,配置,笔记总结

Git安装与常用命令 本教程里的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举: ls/ll 查看当前目录 cat 查看文件内容 touch 创建文件 vi vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编 辑…