Docker原理探究
问题思考:
-------------------------------------Docker浅显原理理解-------------------------------------
P1. ubuntu16.04中docker运行ubuntu16.04的镜像
S1. 可以,以osrf/ros:kinetic-desktop-fulll做过验证,并运行小乌龟程序
P2. ubuntu16.04中docker运行ubuntu14.04的镜像
S2. 可以,以osrf/ros:indigo-desktop-trusty验证,并运行小乌龟程序
P3. ubuntu16.04中docker运行debian的镜像
S3. 可以,以osrf/ros:kinetic-desktop-jessie验证,并运行小乌龟程序
P4. ubuntu16.04中docker运行centos镜像
S4. 可以,以$ docker pull centos:centos7 下拉centos镜像,并通过命令$ yum install vim 验证
P5. 笔记本ubuntu16.04中docker运行arm架构的ubuntu16.04镜像
S5. 不可以
P6. ubuntu16.04中docker运行windows镜像
S6. 不可以
P7. 利用docker pull ros:kinetic下拉镜像,(1)并配置install文件夹,看能否启动tergeo (2)配置编译环境
S7. (1)报错,Segmentation fault (core dumped)
-------------------------------------Docker深度原理理解-------------------------------------
P1. ubuntu16.04系统中docker是否可运行基于其他系统级镜像(linux内核相同,但linux发行版本不同,如ubuntu14.04、centos、debian等)构建的docker镜像? - 系统发行版层面
S1. 可以。
P2. ubuntu16.04系统中docker打包的镜像,是否可运行在其他系统(linux内核相同,但linux发行版本不同,如ubuntu16.04、centos、debian等)中?
S2. 可以。因为docker是基于linux内核开发的应用容器,其镜像中可以包含一个完整的操作系统环境(不含内核),里面仅安装了Apache或用户需要的其它应用程序。
[SUM]. 从S1和S2中可知,只要容器内的应用程序(含除内核外的操作系统)相同,在ubuntu16.04、ubuntu14.04、centos和debian等系统中打包的镜像都无区别。
P3. ubuntu16.04系统中docker是否可运行基于其他系统级镜像(内核不同,如windows、macOS等)构建的docker镜像? - 系统内核层面
S3. 不可以,因为内核不同。若可以,则肯定是对镜像做过特殊处理的;否则违背了docker的基本原理。
P4. ubuntu16.04系统中docker打包的镜像,是否可运行在其他系统(内核不同,如windows、macOS等)中?
S4. 不可以,因为内核不同。而安装docker-on-windows和docker-on-mac后,之所以能够运行ubuntu16.04的镜像,是因为docker其实是运行在含轻量级linux系统的虚拟机上的(windows也可以运行在Linux子系统中)
P5. x86架构下的ubuntu16.04系统是否可运行arm架构的ubuntu16.04系统镜像? - 硬件架构层面
S5. 不可以。内核不同,装在arm上的linux是需要重新编译内核的,所以和x86上的linux内核是不一样的;arm平台上c程序需要arm-linux-gcc来编译,而x86平台直接用gcc就能编译。
P6. x86架构下的ubuntu16.04系统中docker打包的镜像,是否可运行在arm架构的ubuntu16.04系统下?
S6. 不可以。运行报错,
P7. docker能否指定镜像内模拟的硬件架构?如果能,如何指定?
S7. 不可以。这句话其实本身就有问题;因为dokcer运行在宿主系统内核上的,它不和硬件直接接触,它所认为硬件架构肯定和宿主主机一致。
为解决以上问题,在阿里云中申请服务器。
关于阿里云服务器ecs
1. ssh远程连接服务器
链接: https://help.aliyun.com/document_detail/51798.html?spm=a2c4g.11186623.6.648.1cb23182anfDYV#linux
2. 获取密钥
链接: https://help.aliyun.com/document_detail/51793.html?spm=a2c4g.11186623.2.26.6a4e2320RQ55tK#concept-wy4-th1-ydb
3. 若ecs实例想要和外界通信(ssh控制,数据传输等),需付费购买外网ip
初始购买或扩展配置
-------------------------------------Docker原理解析-------------------------------------
Docker容器技术是基于Linux内核实现的, 它主要用到了三个内核模块:
Namespace: 命名空间;用于容器的隔离, 例如PID Namespace使得容器中的进程无法感知宿主机以及其他容器中的进程。
Cgroups: 控制组;用于容器的资源控制, 比如限制容器所使用的内存大小或者CPU个数。
AUFS: 联合文件系统;docker的存储驱动方式之一,它可以将多个目录合并成一个虚拟文件系统;Docker镜像(Image)是由一个或多个AUFS branch组成,
并且所有的branch均为只读权限;在运行容器的时候,创建一个AUFS branch位于image层之上,具有rw权限,并把这些branch联合挂载到一个挂载点下。
这就是Docker能够一个镜像运行多个容器的原理所在。
两篇关于Docker原理解析的优秀博客:
1. Docker核心技术与实现原理(https://draveness.me/docker)
2. 一篇不一样的docker原理解析(https://www.cnblogs.com/heyanan/p/7800284.html)
docker社区:
1. docker中文社区(http://www.docker.org.cn/)
关于docker安装windows镜像的讨论:
1. https://www.v2ex.com/t/404193
2. https://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/
3. 可以在docker容器里跑windows么?(https://segmentfault.com/q/1010000002450886)
Docker原理探究的更多相关文章
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
- [原] KVM 虚拟化原理探究 —— 目录
KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
- [原] KVM 虚拟化原理探究(4)— 内存虚拟化
KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...
- [原] KVM 虚拟化原理探究(3)— CPU 虚拟化
KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...
- [原] KVM 虚拟化原理探究(2)— QEMU启动过程
KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...
- 弱类型变量原理探究(转载 http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php)
N首页> 云计算 [问底]王帅:深入PHP内核(一)——弱类型变量原理探究 发表于2014-09-19 09:00| 13055次阅读| 来源CSDN| 36 条评论| 作者王帅 问底PHP王帅 ...
- js事件底层原理探究
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
随机推荐
- python基础学习23----IO模型(简)
对于一个网络IO(network IO),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel).当一个read操作发生时,该操作会经历 ...
- angular、jquery、vue 的区别与联系
angular和jquery的区别 angular中是尽量避免操作DOM, angular是基于数据驱动, 适合做数据操作比较繁琐的项目,angular适用于单页面开发,是一个比较完善的mvvm框架, ...
- 【汇编】SI DI 的用法
一.汇编语言中,为什么SI和DI不能同时使用汇编 其实你可以想一下,这两个寄存器的意思,SI源变址寄存器,DI目地变址寄存器,既然是变址寄存器,那么他们肯定是在某个地址的基础上进行偏移变化,由此我们就 ...
- FZU Monthly-201901 tutorial
FZU Monthly-201901 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 AHG F B CE D 编码难度 ...
- 关于Java集合类库中的几种常用队列
Java中几种常用的队列 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞 ...
- 单一事件中心管理组件通信( vuex )
有时候两个组件也需要通信(非父子关系).在简单的场景下,可以使用一个空的 Vue 实例作为中央事件总线: 补充$emit ,$on的讲解 代码: <!DOCTYPE html> <h ...
- BZOJ5334:[TJOI2018]数学计算(线段树)
Description 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型: 1 m: x = x * m ,输出 x%mod; 2 pos: x = x / 第pos次操作所乘 ...
- 【转】 [置顶] Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...
- 使用 rem 作为单位使页面自适应设备宽度
一.新建 rem.js 文件,代码如下: export default function () { document.documentElement.style.fontSize = document ...
- sublime出现 unable download.......
I managed to fix this by changing my package settings. I made my osx downloader preference curl, and ...