docker由浅入深

一、什么是docker

docker 顾名思义就是轮船的意思,轮船我们知道是通过集装箱运载货物的东西,那么docker其实也是类似的东西,只是装载的是虚拟的运行程序罢了。其中集装箱在docker里面被称为container(后面以容器称之)。
docker做的事情就是通过容器隔离各个运行程序或者叫APP之间的环境,达到可以一键部署或者快速迁移到别的设备上的过程,整体框架如下图所示:
docker整体框架图
docker采用的是client-server的架构,也就是客户端-服务端的架构,客户端(上图client部分)其实就是docker这个轮船想要将他的容器搬到的地方,就像轮船的目的地一样;然后服务端(上图docker host和registry部分)其实就是docker中容器的构建,通俗点讲就是怎么做好这个集装箱(容器),以及如何将货物(app,以及环境依赖)存放在这个集装箱里面去,就是轮船的出发地或者生成车间。

二、为什么要docker

docker发明出来是用来干嘛前文已经讲到了,那为什么要docker这种技术呢。docker的目标其实就一句话“build once, run everywhere”,我编译一次之后可以在不同的地方上运行起来,而不需要考虑环境配置的问题,这个有点像python中用conda或者pip来管理并配置运行环境依赖。
所以为什么要docker,也就是docker这个东西的作用:

  1. docker可以在一台电脑或者机器上构建多个container,然后各自独立运行
  2. docker隔离不同container之间的好处还有一点就是系统空间资源可以复用,可以维护多个版本,最新开发的版本出了问题可以快速回退之间的版本或者定位bug啥的
  3. 构建好了container可以通过打包的方式去快速部署到其他机器上,快速在开发-运维-测试之间快速验证对应功能的效果
  4. 构建一个container可以多个同事之间共同访问,而不需要从零开始搭建环境,就可以快速迭代app的一些功能完成一些功能的开发或者测试复现啥的(这个有点像git对应的代码管理,只是git只是共同管理源代码,而docker还需要管理编译好的可执行程序以及环境依赖)
  5. 既然可以快速部署,那发现bug或者错误的时候就可以快速修改并重新打包给到测试或者其他人员测试反馈
  6. 相比于虚拟机,docker是更轻量级的,可以快速启动和结束,执行效率比虚拟机要高很多
  7. docker可以指定或者限制当前容器只可以看到整个机器的部分资源,比如构建docker的时候我只需要在服务器上用到0号GPU(这个服务器总共有0-7号服务器8张卡),那构建container的时候就可以指定我只用第0号卡去运行我的程序;或者我只可以访问/media/sda这个目录啥的,还有内存的上限设置等

三、docker怎么用

看到docker有这么多用处,那我们怎么使用docker。首先先了解一些docker涉及到的常用概念和命令,以及一些常用的功能,这样基本上就可以解决绝大部分的问题了。

3.1 常见的概念

  1. 镜像(Image):其实就是一套文件系统,比如我们如果要安装ubuntu环境的一般都是下载一个Ubuntu的镜像文件来安装。
  2. 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
  3. 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

3.2 docker常见的命令

docker有很多命令来控制或者生成一些东西。如果要从零开始在电脑上安装docker,建议还是Ubuntu等linux下或者window系统中虚拟机环境中。docker本身是go语言开发的基于linux环境的一款产品。从零开始安装我建议可以看看一些基础教程,比如菜鸟教程这里我只给出一些我工作中常用的一些命令:

  1. docker images: 列举出当前设备下的所有docker镜像,一般是安装好了镜像之后会去查看一下,或者要通过某一个镜像要去构建container的时候会去看看某一个镜像的一些基础参数等,另外就是管理设备上的镜像,比如我想要删除某一个很老的镜像
  2. docker ps -a: 列举出当前设备下所有的容器的一些信息,比如ID,name,对应的镜像是哪个,什么时候创建的,以及是否处于待机或者关闭状态等。如果不加-a这是列举出当前设备下的所有start好的容器的信息。一般是在需要管理容器或者开启某一个容器的时候会去调用并查看一下信息
  3. docker start container name(container ID): 开启一个container,比如我需要将某一个容器名称叫test开启(本身test这个容器是属于关闭状态),然后我就调用 docker start test,就可以start这个容器了
  4. docker exec -it container_name /bin/bash:这条命令一般是在3的基础上开始运行某一个容器的命令,当然还有其他的参数可以设置,这里的意思是以bash命令用户交互窗口界面的方式运行container_name,进入容器之后就是我们普通的Linux的开始界面了,可以输入我们的一些Linux的一些命令,完成对应的一些操作。更多参数说明请使用docker exec --help命令查看。进入容器想要退出直接在界面中输入exit即可。
  5. docker pull xxx: 从远端仓库中拉取一些编译好的镜像部署到本地机器上。
  6. docker export container_name/ID > xxx.tar: 将一个容器导出成一个tar打包好的文件,这样就可以在其他机器上部署这个容器了
  7. docker import: 将一个容器导入到本地机器上,比如cat xxx.tar | docker import - test 就是将xxx.tar的容器文件导入到本地test这个容器中
  8. docker rm/stop/restart xxx: 表示删除/停止/重启某一个容器,一般是用来管理本地机器上的容器。比如我们如果想要修改某一个容器的一些配置,我们就需要先关掉这个容器,然后sudo su权限下,修改/var/lib/docker/container_ID目录下的hostconfig.json以及config.v2.json文件中的参数设置,最后再restart这个容器(可以参考docker给已经启动容器添加挂载目录_51CTO博客_docker容器挂载目录)

四、docker的替代方案

docker是一个很好的产品,但是也是有一些替换方案的,比如podman等,具体可以参看文章等其他相关的一些文章,这里就不赘述了

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

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

相关文章

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题

最近在编译一个比较老的项目,git clone 之后使用 async 之后出现一下现象: 首先确定是我网络本身是没有问题的,尝试几次重新 async 之后还是出现问题,网上找了一些方法解决了本问题,以此来记录一下问题是如何解决的。 …

Python(19)Excel表格操作Ⅰ

目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows(行) 5、工作表.columns(列) 小结 导包 要想使用 python 操作 Excel 文件,应当导入 openpyxl 包。在…

上位机图像处理和嵌入式模块部署(视频处理vs图像处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 从目前发展的情况来看,视频处理会慢慢变成一种主流趋势。这里面的原因很多,比如说现在嵌入式soc的算力越来越强、获取图像的…

【环境配置】安装了pytorch但是报错torch.cuda.is_availabel()=Flase

解决思路:import torch正常,说明torch包安装正常,但是不能和gpu正常互动,猜测还是pytroch和cuda的配合问题 1.查看torch包所需的cuda版本 我的torch是2.0.1,在现在是比较新的包,需要12以上的cuda支持&…

鸿蒙首批原生应用!无感验证已完美适配鸿蒙系统

顶象无感验证已成功适配鸿蒙系统,成为首批鸿蒙原生应用,助力鸿蒙生态的快速发展。 作为全场景分布式操作系统,鸿蒙系统旨在打破不同设备之间的界限,实现极速发现、极速连接、硬件互助、资源共享。迄今生态设备数已突破8亿台&…

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

redis面试

0.思维导图 1. redis的数据类型♥♥♥ redis有五种数据类型,包括string,list,set,hash,zset;string就类似于java中的字符串,list就类似于Java中的列表,可以存放重复的元素,set就类似于java中的hashset,不能存放重复的…

索引文件的建立与查询示例(五)

隔了好几天没顾上更新内容,在此继续吧。还是得多动头脑,否则忙于日常事务,脑子不够灵活。在代码的世界里还是能有一些灵感。上次说到在内存中实现链表建立以及打印出链表的操作。这节我们试着将链表存入文件,并从文件中进行读取。…

关于maven项目构建的解释

在Idea中使用模块化构建项目 项目介绍: sky-server依赖sky-pojo和sky-common,继承sky-take-outsky-pojo继承sky-take-outsky-common继承sky-take-out 由于Idea编译器自动识别引入的模块,所以在Idea中可以运行项目。 在Idea中使用maven打包…

Java多线程--同步机制解决线程安全问题方式二:同步方法

文章目录 一、同步方法(1)同步方法--案例11、案例12、案例1之同步监视器 (2)同步方法--案例21、案例2之同步监视器的问题2、案例2的补充说明 二、代码及重要说明(1)代码(2)重要说明 …

用GPT写PHP框架

参考https://www.askchat.ai?r237422 写一个mvc框架 上面是简单的案例,完整的PHP框架,其核心通常包含以下几个关键组件: 1. 路由(Routing):路由组件负责解析请求的URL,并将其映射到相应的控制…

Springboot项目启动后浏览器不能直接访问接口,而postman可以访问?

在云服务器上部署springboot后端时,项目启动后浏览器不能直接访问接口,而postman可以访问。这是当时困扰了我大半天的小问题,在我打开防火墙和阿里云安全组之后还是没解决。然后在网上搜了很多很多资料,以为是浏览器访问权限或者是https什么证…

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称:基于LVQ神经网络的乳腺肿瘤诊断(类型分类) 版本日期:2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院…

H.264与H.265的主要差异

H.265仍然采用混合编解码,编解码结构域H.264基本一致, H.265与H.264的主要不同 编码块划分结构:采用CU (CodingUnit)、PU(PredictionUnit)和TU(TransformUnit)的递归结构。 并行工具:增加了Tile以及WPP等并行工具集以提高编码速…

优化器刺客之limit 1--Order by col limit n 代价预估优化探索

一、现象 order by 排序加了limit后更慢了? test# explain analyze select userid from dba_users where username like %aaaaaaaaaaaaaaaaaa% order by userid ;QUERY PLAN --------------…

第4章 python深度学习——(波斯美女)

第4章 机器学习基础 本章包括以下内容: 除分类和回归之外的机器学习形式 评估机器学习模型的规范流程 为深度学习准备数据 特征工程 解决过拟合 处理机器学习问题的通用工作流程 学完第 3 章的三个实例,你应该已经知道如何用神经网络解决分类问题和回归…

调试小结:PHY初始化前后Link Status是否能正确反应网线插上、拔下状态

1 说明 为了验证是否需要初始化PHY才能检测到网线插上、拔下,这里我们对比初始化PHY(LAN8720)前后,插拔网线PHY寄存器1的bit2的是否按照预期变化来进行测试。 我们查看的PHY寄存器是1的bit2,定义如下: 2…

anaconda离线安装包的方法

当设备没有网络时,可以使用有网络的设备先下载所需安装包,然后离线拷贝到需要安装的设备,最后安装。 一. 下载所需安装包 下载命令:使用pip download。详细描述参见pip download -h 以"blind-watermark"为例。 pip …

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试,但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行,百度搜索需要更换监听的地址即修改launchSettings.json,修改为0.0.0.0:5248,这样不管local…

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…