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.mzph.cn/news/651360.shtml

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

相关文章

软件安全测试的重要性简析,专业安全测试报告如何申请?

在当今数字化时代,软件在我们的日常生活中扮演着至关重要的角色,但也带来了各种潜在的安全威胁。为了保障用户的信息安全和维护软件的可靠性,软件安全测试显得尤为重要。 软件安全测试是指通过一系列的方法和技术,对软件系统中的…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面: 开发属性: 1. 功能属性:功能是短视频矩阵系统的核心属性,包括短视频的采集、编辑、发布、推广、互动等功能。此外,系统的个性化定制也是考虑的重要因素&#xff0…

Qt实现验证码相关功能

验证码的原理 验证码的原理基于人类视觉和计算机视觉的差异性。通过给用户显示一些难以被机器识别的图形或文字,让用户进行人机交互,确认自己的身份。这样可以防止机器大规模注册、机器暴力破解数据密码等危害,保护网站安全。 Qt实现验证码…

循环的乐章与爱情的旋律

循环的乐章与爱情的旋律 The Rhapsody of Loops and the Melody of Love 在一个阳光明媚的Java编程课上,男主角林浩然,一个热衷于代码逻辑和算法谜题的大二学生,正沉浸在他的Java世界里。而女主角杨凌芸,则是班级中出了名的“程序…

【图论】拓扑排序

昨天复习的知识点。 ​先复习一下 AOE网。 AOE网,简单来说就是工程的带权有向图,其中: 顶点:活动开始或者结束的事件边:活动边的权值:完成该活动所需的时间 在AOE网中,想要完成一项活动&…

认识思维之熵

经常有读者问我,说: 为什么向您请教一个问题,您总能很快指出在哪篇文章里面提到过,是因为您的记忆力特别好吗? 其实不是的。更重要的原因是:如果你经过系统训练,有意识地去获取知识的话&#x…

华为服务器RAID5

0、BIOS默认密码 TaiShan 100服务器BIOS系统的默认密码为 Huawei12#$ TaiShan 200服务器BIOS系统的默认密码为 Admin9000 1、服务器开机选择DEL,进行设置 2、选择设备管理器进入配置页面 3、选择AVAGO MegaRAID configuration utility 进入raid配置 4、选择 Main Menu 进入主…

在线curl命令转换工具 - KGtools

KGtools提供在线curl命令转换工具,帮助您将curl命令转换为Python代码或命令行格式,将复杂的curl命令转换为可直接在Python程序中使用的代码 https://www.kgtools.cn/convert/curl

使用Transformer 模型进行时间序列预测的Pytorch代码示例

时间序列预测是一个经久不衰的主题,受自然语言处理领域的成功启发,transformer模型也在时间序列预测有了很大的发展。本文可以作为学习使用Transformer 模型的时间序列预测的一个起点。 数据集 这里我们直接使用kaggle中的 Store Sales — Time Series …

Vue3的computed和watch

目录 1、computed 2、computed完整写法 3、watch 4、watch监听对象具体属性 5、watch 监听reactive数据 1、computed 基于现有的数据计算出新的数据 <script setup >import {ref,computed} from vue const numref(1) const doubleNumcomputed(()>{return num.val…

latex表格示例(背景颜色、行距、线粗细、标题、表格长度)

导入库 \usepackage{colortbl} 代码 \begin{table}[H] \begin{center}%表格居中 \tabcolsep1.5cm%表格横向长度 \renewcommand\arraystretch{1.5}%设置表格行间距 \begin{tabular}{cc} \toprule[2pt]%设置线的宽度 %\specialrule{0em}{3pt}{8pt}%添加一条线&#xff0c;第一个…

《Linux高性能服务器编程》笔记08

Linux高性能服务器编程 本文是读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第08章 高性能服务器程序框架8.1 服务器…

docker拉取镜像时指定其OS及CPU指令集类型

前言 之前在香橙派5上安装的时候碰到过一次指定镜像的OS及cpu指令集类型的问题&#xff0c;但是当时没有记录&#xff0c;现在用到 了又想不起来&#xff0c;干脆就自己记录一下。预防后面忘掉。docker报错截图 上次时在arm的cpu中运行x86镜像&#xff0c;这次时在x86中运行arm…

C语言从入门到入坟

前言 1.初识程序 有穷性 在有限的操作步骤内完成。有穷性是算法的重要特性&#xff0c;任何一个问题的解决不论其采取什么样的算法&#xff0c;其终归是要把问题解决好。如果一种算法的执行时间是无限的&#xff0c;或在期望的时间内没有完成&#xff0c;那么这种算法就是无用…

MYSQL库和表的操作(修改字符集和校验规则,备份和恢复数据库及库和表的增删改查)

文章目录 一、MSYQL库的操作1.连接MYSQL2.查看当前数据库3.创建数据库4.字符集和校验规则5.修改数据库6.删除数据库7.备份和恢复8.查看连接 二、表的操作1.创建表2.查看表结构3.修改表4.删除表 一、MSYQL库的操作 1.连接MYSQL 我们使用下面的语句来连接MSYQL&#xff1a; my…

关于session每次请求都会改变的问题

这几天在部署一个前后端分离的项目&#xff0c;使用docker进行部署&#xff0c;在本地测试没有一点问题没有&#xff0c;前脚刚把后端部署到服务器&#xff0c;后脚测试就出现了问题&#xff01;查看控制台报错提示跨域错误&#xff1f;但是对于静态资源请求&#xff0c;包括登…

【CSS】字体效果展示

测试时使用了Google浏览器。 1.Courier New 2.monospace 3.Franklin Gothic Medium 4.Arial Narrow 5.Arial 6.sans-serif 7.Gill Sans MT 8.Calibri 9.Trebuchet MS 10.Lucida Sans 11.Lucida Grande 12.Lucida Sans Unicode 13.Geneva 14.Verdana 15.Segoe UI 16.Tahoma 17.…

【2024华数杯国际数学建模竞赛】问题B 光伏发电 完整代码+结果分析+论文框架(二)

问题B&#xff08;二&#xff09; 5.2 问题二模型的建立与求解&#xff08;二&#xff09;5.1.4基于LSTM的时间序列预测模型5.1.5 LSTM的时间序列预测结果5.1.6 多元回归模型的预测结果5.1.7 LSTM时间序列模型的性能评价 5.2 问题二模型的建立与求解5.2.1基于皮尔逊系数相关性分…

【C++中STL】set/multiset容器

set/multiset容器 Set基本概念set构造和赋值set的大小和交换set的插入和删除set查找和统计 set和multiset的区别pair对组两种创建方式 set容器排序 Set基本概念 所有元素都会在插入时自动被排序。 set/multist容器属于关联式容器&#xff0c;底层结构属于二叉树。 set不允许容…

架构师的36项修炼-08系统的安全架构设计

本课时讲解系统的安全架构。 本节课主要讲 Web 的攻击与防护、信息的加解密与反垃圾。其中 Web 攻击方式包括 XSS 跨站点脚本攻击、SQL 注入攻击和 CSRF 跨站点请求伪造攻击&#xff1b;防护手段主要有消毒过滤、SQL 参数绑定、验证码和防火墙&#xff1b;加密手段&#xff0c…