Ubuntu 下的 Docker 安装与使用
Contents1 Docker 安装2 Docker 使用2.1 启动 docker 服务2.2 拉取镜像2.3 启动镜像2.4 后台运行2.5 查看容器2.6 进入后台容器2.7 删除容器2.8 启动与停止容器2.9 共享目录3 Docker 高级3.1 提交本地镜像修改3.2 推送到远程仓库 …
- 25.24k
- 7
- 阅读全文
Jackie Liu
做正确的事,把事情做正确。
Contents1 Docker 安装2 Docker 使用2.1 启动 docker 服务2.2 拉取镜像2.3 启动镜像2.4 后台运行2.5 查看容器2.6 进入后台容器2.7 删除容器2.8 启动与停止容器2.9 共享目录3 Docker 高级3.1 提交本地镜像修改3.2 推送到远程仓库 …
自接触计算机开始前前后后大约接触过不下于 100 本计算机相关的书籍,这其中有写得很棒的当然也有写得很糟糕的书籍 1,写得棒的我接下来将为入行者一一推荐。 Contents1 新手入行1.1 C 程序设计语言1.2 Linux 操作系统与命令2 中级开发2.1 命令行程序2.2 图形程序3 高级进阶…
总有这样一群人,不计报酬不辞辛苦的为这个世界的美好添砖加瓦,在这一类人中的某一些人,他们开创了许多伟大的开源工程,这些工程也许会随着年代的久远逐渐被替代,但仍然有一些随着时光流逝变得愈发强大,这其中就包括了 Linux 内核工程。还有一群怀揣着梦想的人,总是提醒自己不断的变得强大,变得专业,所以依托…
今天与大家分享如何在 Linux 操作系统中读写寄存器,当然对于熟悉嵌入式系统的人来讲早就烂熟如心,但是还是写出来方便交流与提示后来者。 Linux 内核中操作寄存器 其实对于 Linux 内核中操作寄存器是一件特别简单的事情,首先你需要知道你要操作寄存器的地址,有可能是网卡状态寄存器,有可能是门铃…
能够停留下来认真读这篇文章的人大部分都已经了解了什么是自旋锁,至少知道自旋锁就是不停的询问资源有没有准备好的一把锁,这个从概念上很容易理解,当然他的内在也是很容易实现。 Contents1 为什么需要自旋锁1.1 为什么自旋锁会禁止抢占1.2 为什么临界区禁止睡眠2 spin_lock 系列的分别3…
Contents1 为什么需要拥塞控制2 如何使用拥塞控制3 拥塞状态如何控制4 什么条件下会被设置拥塞5 其他细节 为什么需要拥塞控制 前面已经介绍了 Linux 操作系统通用块层中作为数据流动的关键因素 BIO,从软件的角度来讲,只要代码执行得够快,理论上就可以不停的下发数据让后端去执行。当然,…
Linux Block 层在 Linux 内核设计之初就作为几大子系统存在,当然这也是得益于他的前辈 Unix 等优秀的设计。作为 IO 子系统的中间层,他为上层输出接口,为下层提供数据,像个勤劳的小蜜蜂,本文介绍通用块层中的最具传奇色彩的 bio,他就像是一个原子,是在整个 block 层的最小单…
Linux 内核尽管是一个大而全的宏内核,包括驱动、文件系统以及内存管理等都打包带走,但是其引以为豪的模块化设计也让他吸收到了微内核所带来的模块化设计思想。这里我们不讨论到底宏内核所带来的高性能和微内核带来的高稳定性等问题,仅仅从技术的角度探讨如何强制卸载一个已经不能通过正常手段卸载的 Linux …
Linux 为驱动开发提供了专门的内存申请函数 kmalloc/kfree,但是偶尔有时候在内存申请完成之后或者设备卸载之后,这一段内存并没有被释放掉,从而导致内存泄露。或者在某些时候内存申请失败时,需要通过多个 goto 来保证不内存泄露,你一定见过类似的代码: int *data, *resou…
Linux 内核包含了许多的驱动,这些驱动都是由一个个模块组合而成,那么怎么编写一个简单的内核驱动模块? 模块源码框架 内核的模块需要按照一定的框架进行搭建,通常情况下都需要模块入口和模块出口1。我们来演示一下怎么编写一个 Hello World 的模块。 #include <linux/mo…