Docker
Docker是什么
Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers),属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker 在容器的基础上进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得其比虚拟机技术更为轻便、快捷。Docker 可以在单一 Linux 实体下运作,避免因为创建一个虚拟机而造成的额外负担。
对于虚拟机技术来说,传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统
容器技术和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器内没有自己的内核,也没有进行硬件虚拟。
具体来说与虚拟机技术对比,Docker 容器的优势:
启动快
资源占用少
体积小
何时会用到Docker
可能对于我, 主要就是应对不同的开发环境配置. 另外, Docker现在也支持windows了. 对于yocto这种需要耗费巨大磁盘空间的, 还是在Linux服务器上搭建, 像micro:bit这种, 可以在Windows上安装docker, 创建一个Linux容器来做了
环境配置
以下是我前面遇到的问题:
Linux开发, yocto需要用到python3, 而且仅支持Ubuntu 16.04以上的系统, 我本地是Manjaro Linux或者Ubuntu 14.04, 那么意味着我要么重新装系统, 要么硬着头皮上, 解决各种包兼容的问题
micro:bit开发, 用到的yotta和PXT, 同样依赖确定版本的python和node.js, 另外还要另一个问题, 开发环境一直在不断更新, 比如半年前准备的开发环境已经不再适用了
多人协作的问题
多个开发人员使用的开发环境不一致, 可能导致难以意料的问题
多个开发人员都需要去准备这样的一个环境, 重复造轮子
安装
还是老实的看官方的文档吧, 有些其他人的博客可能写的不是很全面.
Note: The lsb_release -cs sub-command below returns the name of your Ubuntu distribution, such as xenial. Sometimes, in a distribution like Linux Mint, you might need to change $(lsb_release -cs) to your parent Ubuntu distribution. For example, if you are using Linux Mint Rafaela, you could use trusty.
无需每次使用sudo
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
$sudogroupadd docker
将当前用户加入 docker 组:
$sudousermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
更改Docker数据存储的位置
Docker所下载的image, 生成的containers, 甚至包括持久化数据用的vollume, 默认都会保存到 /var/lib/docker目录下, 而我目前所使用的2.58, /目录只有100G, 现在只有30G空间了, 编译yocto肯定不可行了, 需要把位置移动到/home下面.
# 停止docker服务
# sudo sysemctl stop docker
$sudoservice docker stop
# 更改配置文件
# 配置文件是默认不存在的, 默认位置如下, 当然也可以换成其他路径
# 填入以下内容, 指向新的位置
$sudonano /etc/docker/daemon.json
{