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等,具体可以参看文章等其他相关的一些文章,这里就不赘述了

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

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

相关文章

怎样自行搭建幻兽帕鲁游戏联机服务器?

幻兽帕鲁是一款深受玩家喜爱的多人在线游戏,为了获取更好的游戏体验,许多玩家希望能够自行搭建幻兽帕鲁游戏联机服务器,本文将指导大家如何自行搭建幻兽帕鲁游戏联机服务器。 自行搭建幻兽帕鲁游戏联机服务器,阿里云是一个不错的选…

2024.1.27 GNSS 学习笔记

1.精确的描述轨道的一组数据(星历)是实现精确定位与导航的基础。 2.GNSS卫星广播星历的提供方式一般有两种:一种是提供开普勒轨道参数和必要的轨道摄动改正项参数,如GPS、BDS、Galileo三大系统采用此种模式,还有QZSS系统;另一种是…

Win32 PE图标资源提取(ICO图标提取)

最近需要写一个提取EXE或者DLL图标资源的功能, 网上找了很久, 要么功能不好用, 最后结果如下: 1.很多是加载为HICON句柄后转换为图片保存, 全损画质..., 2.后来找了个还能用的, 详见 https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/IconExtractor.cpp …

力扣1312. 让字符串成为回文串的最少插入次数

动态规划 思路: 通过插入字符构造回文串,要想插入次数最少,可以将字符串 s 的逆序 s 进行比较找出最长公共子序列;可以先分析,字符串 s 通过插入得到回文串 ps,其中间的字符应该不会变化: 若 s…

计算方法实验1:熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能,熟悉Matlab 命令窗口及文件管理,Matlab 帮助系统。掌握命令行的输入及编辑,用户目录及搜索路径的配置。了解Matlab 数据的特点,熟悉Matlab 变量的命名规则&a…

log4cplus开源库使用

log4cplus 的github地址:https://github.com/log4cplus/log4cplus 下载链接:log4cplus - Browse /log4cplus-stable/2.0.7 at SourceForge.net 官方文档:log4cplus / Wiki / Home 1.log4cplus配置 (1)打开解决方案…

迷人的数据结构:揭秘数组和链表的不同

数据结构中的数组和链表的区别 一、简介二、数组的特点和特性三、链表的特点和特性四、数组和链表的对比五、数组和链表的代码实现六、总结 一、简介 数据结构是组织和存储数据的方式,直接影响着程序性能、内存利用和资源管理等关键方面。 数据结构提供了各种方法来…

写点东西《JavaScript 中的递归》

写点东西《JavaScript 中的递归》 您是否曾经发现自己需要在 JavaScript 中循环遍历一个复杂的多维对象,却不知道如何操作? 那么,递归函数到底是什么? 让我们回到我们的树对象。 为什么使用递归🌟更多精彩 您是否曾经发…

【前端web入门第二天】01 html语法实现列表与表格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表、定义列表。 1…

动态规划算法题刷题笔记

首先看动态规划的三要素:重叠子问题、最优子结构和状态转移方程。 重叠子问题:存在大量的重复计算 最优子结构: 状态转移方程:当前状态转移成以前的状态 动态规划的解题步骤主要有: 确定 dp 数组以及下标的含义状…

HTML新手教程

HTML入门 教程:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一.初识HTML HyperTextMarkupLanguage(超文本标记语言) 超文本包括:文字、图片、音频、视频、动画。 HTML5的优势 世界知名浏览器厂商对HTML5的支持市场的…

Spring: alibaba代码规范校验工具checkstyle

文章目录 一、idea配置checkstyle插件二、激活CheckStyle三、配置自动格式化功能四、使用代码格式化 一、idea配置checkstyle插件 下载 Intellij IDEA Checkstyle 插件:File -> setting -> plugin通过关键字CheckStyle-IDEA搜索并安装。 安裝完成后重启idea…

【复现】万户ezoffice协同管理平台 任意文件读取漏洞_30

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 万户ezOFFICE协同管理平台分为企业版和政务版。 解决方案由五大应用、两个支撑平台组成,分别为知识管理、工作流程、沟…

Linux cat,tac,more,head,tail命令 查看文本

目录 一. cat 和 tac命令二. head 和 tail 命令三. more命令 一. cat 和 tac命令 cat:用来打开文本文件,从上到下的顺序显示文件内容。tac:用法和cat相同,只不过是从下到上逆序的方式显示文件内容。当文件的内容有很多的时候&…

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流?

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流? 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负…

Linux下的进程操作

进程概念 ps -elf:查看操作系统的所有进程(Linux命令) ctrl z:把进程切换到后台 crtl c:结束进程 fg:把进程切换到前台 获取进程进程号和父进程号 函数原型: pid_t getpid(void); //pid_t…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 📄前言一. 阻塞队列初了解🍆1. 什么是阻塞队列?🍅2. 为什么使用阻塞队列?🥦3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现🍚1. 实现普通队列🍥2. 实现队列的阻塞功…

美赛注意事项

2024年1月27日 : 赖维杰 同学分享 1、最后的展现必须要漂亮(绘图、呈现) 李维情 西北建模王 论文位(核心)必须清楚建模位、编程位知道做了些什么 常见模型: 1、看真题,读往年论文,选…

计算机找不到ucrtbased.dll无法运行程序,分享5种有效的解决方法

当计算机系统在运行过程中无法找到ucrtbased.dll这个特定的动态链接库文件时,可能会引发一系列的问题和故障现象。ucrtbased.dll是Windows操作系统中一个至关重要的组件,它包含了C运行时库的核心函数,对于许多应用程序特别是基于Microsoft Vi…

vue中的computed

目录 一:介绍 二:例子演示 一:介绍 在 Vue.js 中,computed 属性是一种特殊类型的属性,它允许你声明依赖于其他数据属性的值。computed 属性的值是通过一个函数计算得出的,这个函数可以在其依赖的数据发生…