docker的学习(二):docker常用的高级技术总结

简介

docker的一些知识点的总结

UnionFS

分层,轻量级,高性能的文件系统,支持一层层的叠加功能来修改文件系统。
一次同时加载多个文件系统,把各层文件系统叠加起来,最终文件系统会包含所有底层的文件和目录,这对于外部来说,是一个叠加起来的文件系统。

docker原理

docker镜像的基础就是unionfs文件系统,镜像可以通过分层来继承,基于基础镜像,制作各种具体的应用镜像。

docker镜像最底层是引导文件系统bootfs,它包含boot加载器和内核。
在bootfs层之上是rootfs,它就是各种不同的操作系统的发行版,如centos。

docker镜像层都是只读的,容器层是可写的。
当一个容器启动时,一个新的可写层被加载到镜像的顶部,这个可写层就是容器层。

镜像分层的好处

共享资源,方便复制迁移,复用
在镜像中,每一层都可以被共享。

docker commit

docker commit -m=“提交信息” -a=“作者” 容器id 创建的目标镜像名 标签名:提交容器副本让它成为一个新的镜像。
可以通过这个命令,在原来的镜像上,叠加层,给镜像添加新的功能(每层都是新的功能),然后创建出带有新的功能的镜像。
注意
在命令中,是容器id,也就是说,要先通过原来的镜像,创建出容器,在容器上添加新的功能,然后执行commit命令,就会生成一个新的镜像。

容器数据卷

卷,即目录或者文件,由docker挂载到容器,设计的目的是数据的持久化,完全独立于容器的生存周期,因此docker删除的时候,其挂载的容器卷不会被删除。
容器卷是指在宿主机上的一个目录或文件,被映射到容器中的一个目录,从而实现宿主机和容器之间的数据共享和持久化存储。

使用

docker run -it --privileged=ture -v /宿主机绝对路径目录:/容器内目录 镜像名:运行一个带有容器卷存储功能的容器

参数:

  • –privileged=true:可以使容器内的root拥有真正的root权限
  • ro:容器只读不能写,适用于多个容器映射同一个数据卷时

可以通过 docker inspect 容器id输出的信息中的mounts中查看

作用

容器数据卷的作用:

  • 可以在容器之间共享或重用数据
  • 卷中的数据更改可以直接实时生效
  • 数据卷的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

就算容器stop停止了,在挂载的容器数据卷中修改文件目录,然后容器启动,docker中的数据也会更新。

卷的继承和共享

新启动的容器可以继承一个容器的卷规则。
docker run -it --privileged=true --volumes-from 父类容器名 --name 容器名 镜像名
使用后类似于共享一个宿主机的数据卷。
期间,如果父类容器停止了,新的容器挂载容器卷也是没有影响的。

dockerfile

dockerfile是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
dockerfile定义了进程需要的一切东西,包括执行代码或文件,环境变量,依赖包,运行时环境,动态链接库,操作系统的发行版,服务进程和内核进程等等。

基本知识点

  • 每条保留字指令都必须大写,后面至少要带一个参数
  • 指令从上到下顺序执行
  • #是注释符
  • 每条指令都会创建一个新的镜像层并对镜像进行提交

常用的保留字指令

FROM

源头是什么,即当前新镜像是继承哪个基础父类,指定一个已经存在的镜像作为模板,放在第一行。

MAINTAINER

镜像维护者的姓名和邮箱

RUN

容器构建的时候运行的命令,即在docker build时运行。

EXPOSE

当前容器对外暴露出的端口

WORKDIR

指定在创建容器后,终端登录进来时的默认工作目录

USER

指定该镜像以什么样的用户去执行,默认是root

ENV

在构建镜像过程中设置环境变量,类似于dockerfile中的变量

ADD

将宿主机目录下的文件拷贝进容器,会自动处理URL和解压tar包

COPY

类似于ADD,拷贝文件和目录到镜像中
一般ADD比较常用

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

指定容器启动后要干的事。和RUN相似。
可以有多个CMD指令,但只有最后一个生效,而且会被docker run命令后面的参数替换。
RUN是在docker build构建镜像的时候运行
CMD是在docker run的时候运行

变参使用CMD,和entrypoint一起使用的时候,CMD是等于给entrypoint传参的。
简单的理解,就是,docker run的时候,如果没有指定参数,那么cmd里面的内容就会传递给entrypoint;docker run的时候,如果加了参数,那么会替换cmd里面的内容,然后传递给entrypoint。

ENTRYPOINT

也是用来指定容器启动时要运行的命令
类似于CMD指令,但不会被docker run命令后面的参数替换。并且这些参数会被ENTRYPOINT指令指定的程序当成参数。

虚悬镜像

仓库名,标签都是< none >的镜像,可能有风险的,一般要删掉

docker image ls -f dangling=true:可以查询出虚悬镜像
docker image prune:可以删除虚悬镜像

部署微服务

如果公司使用云原生技术,即一切在云端,处处皆容器。那么使用springboot开发的项目,然后通过dockerfile发布微服务部署到docker容器。

打包成jar包

使用maven的package命令把微服务打包成jar包。

上传jar包

把微服务的jar包上传到服务器

编写Dockerfile

FROM java:8
MAINTAINER christ
VOLUME /tmp
ADD spring_boot_docker-0.0.1-SNAPSHOT.jar christ.jar
RUN bash -c 'touch /christ.jar'
ENTRYPOINT ["java","-jar","/christ.jar"]
EXPOSE 8801

构建镜像

docker build -t christ_docker:1.1:构建一个名为christ_docker:1.1的镜像

运行容器

docker run -d -p 8801:8801 christ_docker:1.1:启动容器。

docker 网络

开启docker服务后,默认创建3大网络模式
docker network ls:查看网络
在这里插入图片描述
其他的网络相关命令:
docker network inspect 网络名:查看网络源数据
docker network rm 网络名:删除网络

docker 网络的作用

  • 容器间的互联和通信以及端口映射
  • 容器ip变动时可以通过服务名直接网络通信而不受影响

docker常用的网络模式

  • bridge:为每一个容器分配,设置ip等,并将容器连接到一个docker0,虚拟网桥,默认模式。使用–network bridge指定
  • host:容器不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口。使用–network host指定
  • none:容器有独立的network namespace,但并没有对其进行任何网络设置。使用–network none指定
  • container:新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip,端口范围等。使用–network container:容器id指定

docker容器内部的ip有可能会变化,如果乱了,那调用可能会出错,所以需要我们去规划网络。

自定义网络模式

通过docker network create 网络模式名来自定义桥接网络,默认使用的是桥接网络bridge,启动容器的时候通过--network 自定义网络模式名参数指定网络模式,容器之间的调用就可以通过服务名来调用了(这样,就算容器内部ip变化,也可以调用而不会出错),因为自定义网络本身就维护了主机名和ip的对应关系。
注意:如果启动容器的时候直接指定bridge模式的话,是不可以使用服务名来调用的。

docker compose

docker compose,负责实现对docker容器集群的快速编排。
可以管理多个docker容器组成的一个应用,需要定义一个yaml的配置文件docker-compose.yml,写好多个容器(即服务)之间的调用关系,就可以一次性启动或关闭这些容器。
需要下载docker compose,然后更改执行权限。

compose常用命令

docker-compose up:启动所有docker-compose服务
docker-compose up -d:启动所有docker-compose服务并后台运行
docker-compose down:停止并删除容器,网络,数据卷等
docker-compose ps:展示docker-compose编排过得运行的所有容器
docker-compose top:展示docker-compose编排过容器进程
docker-compose logs yuml服务id:查看容器日志
docker-compose config:检查配置
docker-compose config -q:检查配置,有问题输出
docker-compose restart:重启服务
docker-compose start :启动服务
docker-compose stop:停止服务
注意:这些命令最好在docker-compose.yml目录路径下去执行,在服务不多的时候(10个左右)可以使用这个,再更多服务的话就要使用k8s了。

portainer

管理docker环境的图形化界面工具。方便我们对docker单机或者集群的管理,监控和统计。

– restart=always

docker run指令后面的参数,加上 – restart=always参数,可以让这个容器服务在docker启动的时候跟着启动。

CIG

重量级的docker监控工具,有点类似于elk,注重于监控docker的运行时的环境(cpu,内存,io等)的监控。
类似于docker status命令展示的信息,但是docker status的数据是实时的,没有地方存储数据,没有健康预警功能。
CIG是三个工具的组合:

  • CAdvisor监控收集数据
  • InfluxDB存储数据
  • Granfana页面展示

不过现在这两个监控都有点过时了,一般是使用k8s了的。

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

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

相关文章

大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBaseRedis 章节内容 上一节我们完成了&#xff1a; HBase …

独立看门狗IWDG

一&#xff0c;独立看门狗的讲述 独立看门狗&#xff08;Independent Watchdog&#xff0c;通常缩写为IWDG&#xff09;主要作用是主要用于检测外界电磁干扰&#xff0c;或硬件异常导致的程序跑飞问题。 1.1 IWDG本质上是一个12位的递减计数器。当计数器的值从某个初始…

C语言编译报错:error: expected declaration or statement at end of input(缺了括号)

文章目录 报错信息分析解决步骤&#xff1a; 排查 报错信息 /userdata/testOtherPrj/20240715_box_circuit_breaker/test/external/modbus_vendorA/src/vendor_a_modbus.c: In function ‘VendorA_PowerStop’: /userdata/testOtherPrj/20240715_box_circuit_breaker/test/exte…

PyQT6---环境搭建

1、虚拟环境搭建 创建虚拟环境 create -n pyqt6_39 python3.9 切换虚拟环境 conda activate pyqt6_39 2、安装pyqt6 安装pyqt6和pyqt6-tools pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/…

【视语】XR轻量级开发视语(DZRT)技术

视语&#xff08;DZRT&#xff09;技术介绍目录 视语&#xff08;DZRT&#xff09;介绍 智慧变焦技术 射线追踪技术 一、基本原理 二、实现步骤 三、优化技术 智能框架技术 一、智能框架技术概述 二、智能框架技术的特点 三、应用前景 网格碰撞体优化 1. 使用合适的…

如何采集1688店铺联系方式?

如何获取1688采集店铺联系方式&#xff1f;用大镜山阿里1688商家数据采集软件&#xff0c;打开如下图的窗口&#xff0c;输入采集的关键词&#xff0c;再点“开始采集”和“获取手机”即可。 等待采集完成即可&#xff01; 点”导出“&#xff0c;即可把采集结果导出。 如果需…

策划人如何写一个好的活动策划?

在营销界摸爬滚打十多年&#xff0c;我深刻体会到&#xff0c;策划一场成功的活动就像是烹饪一道美味的大餐。 你需要精心挑选食材&#xff08;活动元素&#xff09;、掌握火候&#xff08;时间控制&#xff09;、调配佐料&#xff08;创意和细节&#xff09;&#xff0c;最终…

Vue3+.NET6前后端分离式管理后台实战(三十)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(三十)

2024年软考复习策略

针对考试的难点&#xff0c;我们应该如何有效应对&#xff1f;面对这种通过率低、知识覆盖广的考试&#xff0c;选择合适的复习策略和优秀的老师至关重要。 以下是一些建议&#xff1a; 首先&#xff0c;在选择教师方面&#xff0c;推荐选择那些实战经验丰富、能精准把握重点…

NVidia 的 gpu 开源 Linux Kernel Module Driver 编译 安装 使用

见面礼&#xff0c;动态查看gpu使用情况&#xff0c;每隔2秒钟自动执行一次 nvidia-smi $ watch -n 2 nvidia-smi 1&#xff0c;找一台nv kmd列表中支持的 GPU 的电脑&#xff0c;安装ubuntu22.04 列表见 github of the kmd source code。 因为 cuda sdk 12.3支持最高到 ubu…

双向链表<数据结构 C版>

目录 关于链表的分类 双向链表结构体 初始化 尾插 头插 打印 判断是否为空 尾删 头删 查找 指定位置之后的插入 指定位置的删除 销毁 关于链表的分类 根据链表的三大特性&#xff0c;单向or双向、带头or不带头、循环or不循环&#xff0c;可将链表分为2*2*2&#xf…

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类&#xff1a;基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理&#xff08;NLP&#xff09;中的一个重要应用&#xff0c;广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络&#xff08;RNN&#xff09;实现情感…

人工智能与社交变革:探索Facebook如何领导智能化社交平台

在过去十年中&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一&#xff0c;充分利用AI技术&#xff0c;不断推动社交平台的智能化&#xff0c;提升用户体验。本文将深入探…

昇思25天学习打卡营第02天|张量Tensor

这节学习的张量&#xff08;Tensor&#xff09;的内容进行总结 &#xff1a; 1、张量的概念&#xff1a;张量是一种多线性函数&#xff0c;可以表示矢量、标量和其他张量之间的线性关系。张量是MindSpore网络运算中的基本数据结构&#xff0c;类似于数组和矩阵。 2、可以通过直…

基于SpringBoot+Vue的校园疫情防控系统(带1w+文档)

基于SpringBootVue的校园疫情防控系统(带1w文档) 基于SpringBootVue的校园疫情防控系统(带1w文档) 主要对首页、个人中心、学生管理、疫情动态管理、知识信息管理、防疫教育管理、健康打卡管理、请假申请管理、出校登记管理、入校登记管理、核酸报告管理、交流论坛、系统管理的…

PHP 高性能框架 Workerman 凭什么能硬刚 Swoole ?

大家好&#xff0c;我是码农先森。 一次偶然看到了国外某机构针对 PHP 周边生态框架及扩展的性能测试排行榜&#xff0c;看到 Workerman 竟遥遥领先 Swoole。在我们 PHP 程序员现有的认知里&#xff0c;Swoole 作为一个基于 C/C 语言编写的扩展程序&#xff0c;性能居然落后了…

MySQL:库表操作

MySQL&#xff1a;库表操作 库操作查看创建字符编码集 删除修改备份 表操作创建查看删除修改 库操作 查看 查看存在哪些数据库&#xff1a; show databases;示例&#xff1a; 查看自己当前处于哪一个数据库&#xff1a; select database();示例&#xff1a; 此处由于我不处于任…

全国区块链职业技能大赛国赛考题前端功能开发

任务3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件login.js、组件管理文件components.js中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功能完整性,示例页面如下: 具体要求如下: (1)有明确的提示,提示用户选择角色; (2)用户可看…

图像分类算法概述:深度学习方法

图像分类算法概述&#xff1a;深度学习方法 图像分类是计算机视觉中的一个基本任务&#xff0c;近年来随着深度学习的发展&#xff0c;图像分类算法取得了巨大的进步。本文将概述主要的深度学习图像分类算法。 #mermaid-svg-hRUH32Xj8pn0L9ug {font-family:"trebuchet ms…

【MySQL-20】关于触发器,你需要知道这些——>定义(创建&查看&删除) 触发器,将变更日志插入日志表中

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…