docker 基本用法及跨平台使用

一、Docker的优点

docker 主要解决的问题就是程序开发过程中编译和部署中遇到的环境配置的问题。

1.1 Docker与其他虚拟机层次结构的区别**

在这里插入图片描述
运行程序重点关注点在于环境。
VM虚拟机是基于Hypervisor虚拟化服务运行的。
Docker是基于内核的虚拟化技术实现的。

1.2 Docker的技术优势

二、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

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

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

相关文章

基于uniapp的h5接入企业微信客服在线聊天

首先说下企业微信接入场景,支持的接入场景有以下几种,基本上涵盖了微信生态大部分场景: 接入步骤 1.创建企业微信号 按照官方操作步骤注册,需要注意的是未认证仅支持接入100人,已认证支持接入2000人. 2.创建客服账号 每个客服账号支持配置人工或是机器人或是人工机器人回复…

分享uniapp + Springboot3+vue3小程序项目实战

分享uniapp Springboot3vue3小程序项目实战 经过10天敲代码,终于从零到项目测试完成,一个前后端分离的小程序实战项目学习完毕 时间从6月12日 到6月22日,具有程序开发基础,第一次写uniapp,Springboot以前用过,VUE3也…

C++ (week8):数据库

文章目录 一、数据库简介1.数据库2.MySQL(1)数据库的结构(2)MySQL的三种使用方式(3)命令行(4)Navicat Premium 二、SQL1.SQL (Structured Query Language),即结构化查询语言2.数据定义语言 DDL (Data Definition Language) ,创建、修改、删除数据库、表结…

dex文件结构(二):dex文件加载基本原理

return mClassLoader; } 1.3 ApplicationLoaders.getClassLoader public ClassLoader getClassLoader(String zip, String libPath, ClassLoader parent){ //Class.getSystemClassLoader返回的是一个PathClassLoader //baseParent是BootClassLoader ClassLoader basePare…

刷代码随想录有感(113):动态规划——爬楼梯plus

题干&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std;int main(){int n,m;cin>>n>>m;vector<int>dp(n 1, 0);dp[0] 1;for(int j 0; j < n; j){for(int i 1; i < m; i){if(j > i)dp[j] dp[j - i];}}cout<&…

cocos 如何使用九宫格图片,以及在微信小程序上失效。

1.在图片下方&#xff0c;点击edit。 2.拖动线条&#xff0c;使四角不被拉伸。 3.使用。 其他 在微信小程序上失效&#xff0c;需要将packable合图功能取消掉。

速度测试分析软件MySpeed

什么是 MySpeed &#xff1f; MySpeed 是一款速度测试分析软件&#xff0c;可记录您长达 30 天的互联网速度。使用 MySpeed&#xff0c;您可以轻松生成有关速度、ping 等的清晰统计数据。配置运行状况检查&#xff0c;以便在出现错误或停机时通过 Gotify、Discord、WhatsApp 或…

海报设计师的福音来了,微软联合清华北大提出Glyph-ByT5-v2,可支持多国语言图文海报生成,效果惊艳!

清华&北大&微软&利物浦大学联合提出Glyph-ByT5-v2这款工具支持多语言图文生成&#xff0c;包括英语、中文、日文、韩文、法文、德文、西班牙文、意大利文、葡萄牙文和俄文。 以下分别展示中、英、日、韩图文的视觉文本结果一起带大家感受一下。 相关链接 论文地址…

Linux源码阅读笔记03-调度器及CFS调度器

调度器 调度器&#xff1a;Linux内核中用来安排调度进程&#xff08;一段程序的执行过程&#xff09;执行的模块成为调度器&#xff0c;他可以切换进程状态。比如&#xff1a;执行、可中断睡眠、不可中断睡眠、退出、暂停等&#xff1b; 调度器的主要职责&#xff1a;选择某些…

gbase8s关于客户端和数据库连接的方式和应用建立连接的简单线索分工

应用和数据库的连接分为本地连接和远程连接&#xff0c;当应用程序和数据库在同一台服务器上为本地连接&#xff0c;不在一台服务器上为远程连接 1. 本地连接 本地连接三种方式&#xff1a; 通过共享内存消息系统&#xff1a;应用和数据库在同一台服务器上&#xff0c;应用程…

C语言 | Leetcode C语言题解之第165题比较版本号

题目&#xff1a; 题解&#xff1a; int compareVersion(char * version1, char * version2){int len1 strlen(version1);int len2 strlen(version2);int i 0;int j 0;while (i < len1 || j < len2) {int num1 0;int num2 0;while (i < len1 && versio…

C#实现音乐在线播放和下载——Windows程序设计作业3

1. 作业内容 编写一个C#程序&#xff0c;在作业二实现的本地播放功能的基础上&#xff0c;新增在线播放和在线下载功能&#xff0c;作业二博客地址&#xff1a;C#实现简单音乐文件解析播放——Windows程序设计作业2 2. 架构选择 考虑到需求中的界面友好和跨版本兼容性&#xf…

STM32读取芯片内部温度

基于stm32f103cbt6这款芯片&#xff0c;原理部分请参考其他文章&#xff0c;此文章为快速上手得到结果&#xff0c;以结果为导向。 1.基础配置 打开stm32cubemx只需要勾选中 ADC1 Temperature Sensor Channel 2.代码分析 /** 函数名&#xff1a;float GetAdcAnlogValue(voi…

120.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件发送功能的封装

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

STM32项目分享:家庭环境监测系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.…

集群初始配置

假设已经有三台或多台 Linux&#xff0c;可以是虚拟机或真实设备。如果希望使用这些 Linux 组成一个集群&#xff0c;并在上面运行一些分布式系统&#xff0c;可能需要如下操作。 1 设置静态IP 输入命令route -n打印路由表&#xff0c;可以查看网关地址。图形界面操作&#x…

跌倒识别:守护公共安全的AI技术应用场景-免费API调用

随着科技的不断进步&#xff0c;人工智能在各个领域的应用日益广泛&#xff0c;其中在公共安全领域&#xff0c;智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…

【第一性原理】邓巴数字

这里写自定义目录标题 什么是邓巴数字邓巴数背后的科学历史上各个组织的人数与邓巴数字的关系在人类进化中的意义现代社会中邓巴数字的体现邓巴数字的意义其他与沟通相关的数据注意事项结论参考 罗宾邓巴教授生于1947年&#xff0c;进化心理学家&#xff0c;牛津大学教授&#…

[信号与系统]关于LTI系统的转换方程、拉普拉斯变换和z变换

前言 本文还是作为前置知识。 LTI系统的传递函数 LTI系统的传递函数 H ( z ) H(z) H(z) 是输出信号的z变换 Y ( z ) Y(z) Y(z) 与输入信号的z变换 X ( z ) X(z) X(z) 的比值&#xff1a; H ( z ) Y ( z ) X ( z ) H(z) \frac{Y(z)}{X(z)} H(z)X(z)Y(z)​ 多项式比值表…

C++之提高篇

1.标准输入输出流 cin与cout的使用&#xff0c;就不多说了&#xff0c;说一个有关保留小数位数的操作&#xff0c;使用ostream对象的precision&#xff08;&#xff09;方法&#xff0c;表达的意思是数字总共有几位&#xff0c;注意&#xff0c;此时是包括整数部分的&#xff…