docker 基本用法及跨平台使用
一、Docker的优点
docker 主要解决的问题就是程序开发过程中编译和部署中遇到的环境配置的问题。
1.1 Docker与其他虚拟机层次结构的区别**
运行程序重点关注点在于环境。
VM虚拟机是基于Hypervisor虚拟化服务运行的。
Docker是基于内核的虚拟化技术实现的。
1.2 Docker的技术优势
-
隔离性 Linux namespace
与c++中namespace作用差不多,但这里是指kernel namespace。使用pid、net、ipc、user等namespace将container的进程、网络、消息、文件系统和用户空间隔离开。
-
控制组 - Control Groups (cgroups) 可配额、可度量
cgroups可以限制blkio、cpu、cpuset、devices、memory、net_cls子系统的资源。
-
便携性:
在Docker中,初始化时也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的方式将一个 readwrite 文件系统挂载在 readonly 的rootfs之上, 这样一组readonly和一个writeable的结构构成一个container的运行时态, 每一个FS被称作一个FS层。如下图:
二、Docker 架构
Docker 结构框图如下
Docker对使用者来讲是一个C/S模式的架构,而Docker的后端是一个非常松耦合的架构,模块各司其职,并有机组合,支撑Docker的运行,如下图所示:
用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
而Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。
Docker 客户端和服务器间通讯实例
Docker Client可以通过以下三种方式和Docker Daemon建立通信:tcp://host:port,unix://path_to_socket和fd://socketfd。
Docker Client发送容器管理请求后,由Docker Daemon接受并处理请求,当Docker Client接收到返回的请求相应并简单处理后,Docker Client一次完整的生命周期就结束了。当需要继续发送容器管理请求时,用户必须再次通过docker可执行文件创建Docker Client。
查看docker的client+server架构
tn@itec:~$ docker version
Client:Version: 24.0.5API version: 1.43Go version: go1.20.3Git commit: 24.0.5-0ubuntu1~20.04.1Built: Mon Aug 21 19:50:14 2023OS/Arch: linux/amd64Context: default
Server:Engine:Version: 24.0.5API version: 1.43 (minimum version 1.12)Go version: go1.20.3Git commit: 24.0.5-0ubuntu1~20.04.1Built: Mon Aug 21 19:50:14 2023OS/Arch: linux/amd64Experimental: truecontainerd:Version: 1.7.2GitCommit:runc:Version: 1.1.7-0ubuntu1~20.04.2GitCommit:docker-init:Version: 0.19.0GitCommit:
演示如下:
Linux下“一切皆文件”,这个也不例外,/var/run/docker.sock就是client和server交互的中间文件
我们可以向/var/run/docker.sock发送请求,也能达到docker ps、docker images这样的效果。
curl -s --unix-socket /var/run/docker.sock http://localhost/images/json |jq
curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json |jq
三、Docker的基本操作指令
指令交互流程图如下:
创建一个Dockerfile:
FROM ubuntu:16.04
# 防止在非交互模式下的TZ数据错误
ARG DEBIAN_FRONTEND=noninteractive# 更新并安装基本工具
RUN apt-get update && apt-get install -y \lsb-release \gnupg2 \curl \&& rm -rf /var/lib/apt/lists/*# 设置默认工作目录
WORKDIR /root# 运行bash
CMD ["bash"]
创建一个镜像:
docker build -t i/ubuntu16.04:v1 .
创建一个容器并运行:
#!/bin/bash
docker run -it \--rm \-v $(pwd)/:/opt/ws/ \-v /home:/home \-v /etc/localtime:/etc/localtime:ro \-v /tmp/.X11-unix:/tmp/.X11-unix \-e DISPLAY=unix$DISPLAY \-w /opt/ws/ \--hostname ubuntu16 \
i/ubuntu16.04:v1
停止容器:
docker stop $(NAME)
运行容器:
docker start $(NAME)
提交当前容器至镜像:
docker commit -a "i" -m "first commmit" upbeat_babbage i_ubuntu16.04:v1
给提交的docker镜像打tag:
docker tag i/ubuntu16.04:v1 hub.itec.com/embedded/release_test:v1
将打完的docker镜像提交到docker镜像仓库:
登录: docker login https://hub.itec.com/
docker push hub.itec.com/embedded/release_test:v1
从docker镜像仓库拉去镜像:
docker pull hub.itec.com/embedded/release_test:v1
将一个镜像导出为tar包:
docker save hub.itec.com/embedded/release_test:v1 -o release_test.tar
将tar包导入至docker镜像
docker load -i release_test.tar
tips:
docker run :根据镜像创建一个容器并运行一个命令,操作的对象是 镜像;
docker exec :在运行的容器中执行命令,操作的对象是 容器。
四、 Docker镜像跨平台使用
为什么在ARM64架构上打包的docker镜像能在X86上面能加载并运行。
1) 通过查看/proc/sys/fs/binfmt_misc/注册表,查询内核是否支持arm64架构。
2) 进一步确认使用的虚拟机解释器
tn@itec:~$ cat /proc/sys/fs/binfmt_misc/qemu-m68k
enabled
interpreter /usr/bin/qemu-m68k-static
flags: OCF
offset 0
magic 7f454c4601020100000000000000000000020004
mask ffffffffffffff00fffffffffffffffffffeffff
tn@itec:~$ cat /proc/sys/fs/binfmt_misc/qemu-aarch64
enabled
interpreter /usr/bin/qemu-aarch64-static
flags: OCF
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00fffffffffffffffffeffffff
从 Docker 19.03 开始,Docker 引入了对 QEMU 的支持,用于在容器中模拟其他架构的 CPU。
在之前的版本需要运行模拟镜像:
sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
在docker build和pull 中指定platform有什么意义?
1) 在build时指定平台的意义完全是构建什么架构的镜像。如果同时指定多个架构,那么将构建多个镜像。
2) 在pull中指定架构,是指在仓库中找到对应架构的镜像,pull到本地docker。
如果在arm64平台上还是不能运行X86的镜像,怎么办?
1) 加载驱动
insmod /usr/lib/modules/5.10.110-rockchip-rk3588/kernel/fs/binfmt_misc.ko
2)添加注册
echo ':qemu-x86:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-x86_64-static:OCF' > register
相关文章:
![](https://img-blog.csdnimg.cn/direct/0c1d4505e9db43e59b8fe765b7fb59cb.png)
docker 基本用法及跨平台使用
一、Docker的优点 docker 主要解决的问题就是程序开发过程中编译和部署中遇到的环境配置的问题。 1.1 Docker与其他虚拟机层次结构的区别** 运行程序重点关注点在于环境。 VM虚拟机是基于Hypervisor虚拟化服务运行的。 Docker是基于内核的虚拟化技术实现的。 1.2 Docker的技…...
![](https://img-blog.csdnimg.cn/direct/385673353c0f4257b756c114550f7b9f.png)
Vscode远程ubuntu
远程连接 到这里vscode远程到ubuntu和关闭远程连接,已完成 配置python环境 在远程目录下新建.vscode隐藏文件夹,文件夹里新建一个 settings.json 文件, 先远程服务器看下conda下的python虚拟环境位置 settings.json位置及内容如下 测试pyt…...
![](https://img-blog.csdnimg.cn/direct/a984d89bf30543d88fd8562da21222f3.png)
SHA256 安全散列算法加速器实验
1、SHA256 介绍 SHA256 加速器是用来计算 SHA-256 的计算单元, SHA256 是 SHA-2 下细分出的一种算法。 SHA-2 名称来自于安全散列算法 2 (英语: Secure Hash Algorithm 2 )的缩写,一种密码散列函 数算法标准…...
![](https://www.ngui.cc/images/no-images.jpg)
Elasticsearch-ES查询单字段去重
ES 语句 整体数据 GET wkl_test/_search {"query": {"match_all": {}} }结果: {"took" : 123,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0…...
![](https://img-blog.csdnimg.cn/img_convert/68844cc171a252a17e80a5f4c40313a8.png)
【Apache Doris】周FAQ集锦:第 7 期
【Apache Doris】周FAQ集锦:第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…...
![](https://img-blog.csdnimg.cn/img_convert/a104573d7b36e85ba0782e784bfeeb6d.jpeg)
EE trade:炒伦敦金的注意事项及交易指南
在贵金属市场中,伦敦金因其高流动性和全球认可度,成为广大投资者的首选。然而,在炒伦敦金的过程中,投资者需要注意一些关键点。南华金业小编带您一起来看看。 国际黄金报价 一般国际黄金报价会提供三个价格: 买价(B…...
![](https://img-blog.csdnimg.cn/direct/38e0bf1532c3440f84103ab74f684124.png)
JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码
JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核,并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…...
![](https://img-blog.csdnimg.cn/direct/0d40ee5a11104be7a899d37bf550e5aa.png)
Python神经影像数据的处理和分析库之nipy使用详解
概要 神经影像学(Neuroimaging)是神经科学中一个重要的分支,主要研究通过影像技术获取和分析大脑结构和功能的信息。nipy(Neuroimaging in Python)是一个强大的 Python 库,专门用于神经影像数据的处理和分析。nipy 提供了一系列工具和方法,帮助研究人员高效地处理神经影…...
![](https://img-blog.csdnimg.cn/direct/94e71b71bfdc4c538af1473f28919c86.png)
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
MongoDB 简介 MongoDB是一个开源的面向文档的NoSQL数据库,它采用了分布式文件存储的数据结构,是当前非常流行的数据库之一。 以下是MongoDB的主要特点和优势: 面向文档的存储: MongoDB是一个面向文档的数据库管理系统࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
使用Redis优化Java应用的性能
使用Redis优化Java应用的性能 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何使用Redis优化Java应用的性能。Redis是一种开源的内存数据结构…...
![](https://www.ngui.cc/images/no-images.jpg)
基于Python的数据可视化大屏的设计与实现
基于Python的数据可视化大屏的设计与实现 Design and Implementation of Python-based Data Visualization Dashboard 完整下载链接:基于Python的数据可视化大屏的设计与实现 文章目录 基于Python的数据可视化大屏的设计与实现摘要第一章 导论1.1 研究背景1.2 研究目的1.3 研…...
![](https://img-blog.csdnimg.cn/direct/28eff0f0cae84b3eb74bb59bfb591224.png)
什么是N卡和A卡?有什么区别?
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是N卡和A卡?有什么区别?…...
![](https://img-blog.csdnimg.cn/img_convert/96e5dc369d8af54a385e726033589d71.png)
四边形不等式优化
四边形不等式优化 应用于类似以下dp转移方程。 f i min 1 ≤ j ≤ i ( w i , j , f i ) f_{i}\min_{1\le j\le i}(w_{i,j},f_{i}) fi1≤j≤imin(wi,j,fi) 假设 w i , j w_{i,j} wi,j 可以在 O ( 1 ) O(1) O(1) 的时间内进行计算。 在正常情况下,…...
![](https://www.ngui.cc/images/no-images.jpg)
这家民营银行起诉担保公司?暴露担保增信兜底隐患
来源 | 镭射财经(leishecaijing) 助贷领域中,各路资方依赖担保增信业务扩张数年,其风险积压也不容忽视。一旦助贷平台或担保公司兜不住底,资方就将陷入被动。 最近,一则民营银行起诉合作担保公司的消息引…...
![](https://img-blog.csdnimg.cn/direct/47672deedf91470c99fff3c657351793.png)
vscode禅模式怎么退出
1、如何进入禅模式:查看--外观--禅模式 2、退出禅模式 按二次ESC,就可以退出。...
![](https://img-blog.csdnimg.cn/direct/6760f9958d644499ae54c5420d36ae8d.png)
Java23种设计模式(四)
1、备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象,备忘录模式属于行为型模式。 备忘录模式允许在不破坏封装性的前提下,捕获和恢复对象的内部状态。 实现方式 创建备忘录…...
![](https://img-blog.csdnimg.cn/direct/137d413b12af4bbd95bbb2381b087077.png#pic_center)
HTML静态网页成品作业(HTML+CSS)——故宫介绍网页(4个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…...
![](https://www.ngui.cc/images/no-images.jpg)
Zookeeper:客户端命令行操作
文章目录 一、help二、ls path三、create四、get path五、set六、stat七、delete八、deleteall 一、help 显示所有操作命令。 二、ls path 使用ls命令来查看当前znode的子节点[可监听] w:监听子节点变化。s:附加次级信息。 三、create 普通创建&am…...
![](https://www.ngui.cc/images/no-images.jpg)
区块链技术介绍和用法
区块链技术是一种分布式账本技术,可以记录和存储一系列交易信息,并通过密码学算法保证信息的安全性和不可篡改性。区块链技术的核心概念是“区块”和“链”。 每个区块包含了一部分交易信息,以及一个指向上一个区块的哈希值。当新的交易发生…...
![](https://img-blog.csdnimg.cn/direct/b014259eecc94acd84e60102d51cdfb4.png)
Upload-Labs-Linux1 使用 一句话木马
解题步骤: 1.新建一个php文件,编写内容: <?php eval($_REQUEST[123]) ?> 2.将编写好的php文件上传,但是发现被阻止,网站只能上传图片文件。 3.解决方法: 将php文件改为图片文件(例…...
![](https://img-blog.csdnimg.cn/img_convert/06120cd06a826df7176ab76d33d88695.png)
从 Hadoop 迁移,无需淘汰和替换
我们仍然惊讶于有如此多的客户来找我们,希望从HDFS迁移到现代对象存储,如MinIO。我们现在以为每个人都已经完成了过渡,但每周,我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候,在这些讨论中ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/8e78c266a02dd7bf63e29f9785c2087b.jpeg)
深度学习:从理论到应用的全面解析
引言 深度学习作为人工智能(AI)的核心技术之一,在过去的十年中取得了显著的进展,并在许多领域中展示了其强大的应用潜力。本文将从理论基础出发,探讨深度学习的最新进展及其在各领域的应用,旨在为读者提供全…...
![](https://img-blog.csdnimg.cn/direct/e9462594c6304fcb924b28fccbd0ea31.png)
【02】区块链技术应用
区块链在金融、能源、医疗、贸易、支付结算、证券等众多领域有着广泛的应用,但是金融依旧是区块链最大且最为重要的应用领域。 1. 区块链技术在金融领域的应用 1.2 概况 自2019年以来,国家互联网信息办公室已发布八批境内区块链信息服务案例清单&#…...
![](https://www.ngui.cc/images/no-images.jpg)
一篇文章搞懂残差网络算法
残差网络(Residual Network,简称ResNet)是一种深度学习架构,它在2015年由微软研究院的Kaiming He等四位作者提出。ResNet的提出是为了解决深度神经网络训练中的梯度消失和梯度爆炸问题,以及随着网络层数增加而出现的性能退化问题。本文将详细介绍残差网络算法的定义、产生…...
![](https://img-blog.csdnimg.cn/direct/cb4d087ed1424091b1b2901c62c8fb23.png)
网络安全:Web 安全 面试题.(SQL注入)
网络安全:Web 安全 面试题.(SQL注入) 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面: (1)基础知识:包括网络基础知识、操作系…...
![](https://img-blog.csdnimg.cn/direct/2e485eea7f7941b696207888219d8d2a.png)
XSS学习(绕过)
学习平台:xss.tesla-space.com XSS学习(绕过) level1level2level3level4level5level6level7level8level9level10level11level12level13level14 level1 应该没有过滤 https://xss.tesla-space.com/level1.php?name<script>alert(1);&…...
![](https://www.ngui.cc/images/no-images.jpg)
深信服2024笔试
一 :服务器 小明是一名公司的IT运维工程师,负责管理公司的IT系统。公司总共有两个配置相同的服务器A和B,各运行了若干个服务。现在小明发现两台服务器上运行的服务占用的内存总和不相等(假设每个服务占用内存是-个恒定正整数),打…...
![](https://www.ngui.cc/images/no-images.jpg)
IOS Swift 从入门到精通:闭包 第一部分
文章目录 创建基本闭包在闭包中接受参数从闭包返回值闭包作为参数尾随闭包语法 创建基本闭包 Swift 允许我们像使用字符串和整数等其他类型一样使用函数。这意味着您可以创建一个函数并将其分配给一个变量,使用该变量调用该函数,甚至可以将该函数作为参…...
![](https://img-blog.csdnimg.cn/img_convert/5d917e84c5a2b32b3006c5bc286b6417.png)
解两道四年级奥数题(等差数列)玩玩
1、1~200这200个连续自然数的全部数字之和是________。 2、2,4,6,……,2008这些偶数的所有各位数字之和是________。 这两道题算易错吧,这里求数字之和,比如124这个数的全部数字之和是1247。 …...
![](https://img-blog.csdnimg.cn/img_convert/9b5ef86eb68e9a4a6a1f42b6c1cff859.jpeg)
深入理解Python中的并发与异步的结合使用
在上一篇文章中,我们讨论了异步编程中的性能优化技巧,并简单介绍了trio和curio库。今天,我们将深入探讨如何将并发编程与异步编程结合使用,并详细讲解如何利用trio和curio库优化异步编程中的性能。 文章目录 并发与异步编程的区…...
![](https://img-blog.csdnimg.cn/f6bede675e0c404c8c3f05a13359debf.png)
房地产网站建设策划书/软文营销成功案例
标准写法如下: 第一种写法: SQL示例如下: create_time > #{startTime} and create_time < #{endTime}第二种写法: 大于等于 <![CDATA[ > ]]> 小于等于 <![CDATA[ < ]]>SQL示例如下: cre…...
![](/images/no-images.jpg)
深圳莲花大厦住房和建设局网站/4001688688人工服务
【IOS最牛神器www.iGrimace.com 】市面唯一可用igrimaceV3永久卡-淘宝网18:27www.igrimace.comigrimace官网-积分墙|苹果ios赚钱软件|igrimace下载18:27www.cnblogs.comAPKTOOL的使用心得 - Curiosity - 博客园18:27item.taobao.com商品宣传软文代写代发百度新闻源收录门户网站…...
![](/images/no-images.jpg)
网络营销模式下品牌推广研究论文/谷歌网站优化
chage命令_Linux chage命令使用详解:修改帐号与密码的有效期限chage命令是用来修改帐号与密码的有效期限。语法:chage [选项] 用户名。选项:-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。-M:密码保持有…...
![](/images/no-images.jpg)
刷业务网站怎么做/seo黑帽优化
删除项目中的版本控制,即删除项目文件夹下的所有.svn文件夹(在做项目的时候,有时候想把项目拷回去看看,但是文件太大了,而且压缩起来很慢。这主要是因为在项目中有大量的.svn文件夹。所以才想把.svn删除)。…...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
信息网站设计案例/企业网站推广的方法有
题意: 给定一棵树,n个节点,若删除点v使得剩下的连通快最大都不超过n/2,则称这样的点满足要求。求所有这样的点,若没有这样的点,输出NONE。 思路: 只需要拿“求树的重心”的代码改一行就OK了。因…...
![](/images/no-images.jpg)
邢台123网/网站优化怎么操作
很多朋友都希望读取txt文本这个功能, 请教了工程师大大,才了解到,本版手机按键已经有了插件读取文本的功能.在按键的plugin目录下有一个file.lua就是文件操作插件,内有帮助文档,同学们可以参考比如读取附件里的qq.txt,代码如下 PutAttachment "/sdcard", "qq.tx…...