![1eb79924599ae8f9673866768f07beb6.png](https://i-blog.csdnimg.cn/blog_migrate/c0a9633faf339d356a029297c2defe33.jpeg)
Docker是什么
- Docker是一种先进的隔离方式,类似于虚拟机,但是相比虚拟机启动和停止速度更快(小于1s),和宿主系统共用内核,不需要系统组件,占用内存空间更少,更加灵活。
- Docker的思想来自于集装箱,云计算就好比大货轮。docker就是集装箱,只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。 @刘允鹏
- Docker的技术原理:使用Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UionFS等技术,对进程进行封装隔离。由于隔离的进程独立于宿主和其他进程,因此也称其为容器。 容器间彼此隔离,还独立于底层的基础设施。应用出问题时,只会影响单个容器。
Docker能做什么及其优势
- 简化部署成本:借用Java的一句话:build once,run every where
- 极小成本:和虚拟机以及双系统甚至多系统比,docker的成本极小而且启动极快
- 良好的生态:docker是开源的加上第三方的参与(如:k8s)让容器生态日新月异,丰富多彩
- Docker Image 采用分层存储的方式,如果多个 Docker Image 共享了一些基础的包(例如 Ubuntu, CUDA ),Docker image 可以只占用一份空间,因此无需特别担心 Docker image 占用过多磁盘空间。
小插曲
- docker项目已经加入到moby
![ce9a4fc1ca236f22309632b65917f7e1.png](https://i-blog.csdnimg.cn/blog_migrate/fc22f1a846d0f1bc5a6ca6f92543cd1e.png)
- Moby的意义:一个致力于推进软件容器化运动的开源项目
- 项目地址:https://github.com/moby/moby
- 备份地址(备份于2020-08-20):https://gitee.com/lixianqiu/docker
- NVIDIA 官方提供nvidia-docker工具,使得 Docker 中也可以使用显卡进行机器学习训练。同时 NVIDIA 在 Dockers Hub 上发布了CUDA的标准 Docker Image 各种 CUDA 和 CUDNN 的版本都有提供
重要概念
- 容器:容器的实质是进程,但与宿主直接执行的进程不同,容器进程的运行有自己的Namespace
- 镜像运行的实体.容器可以被创建,启动,停止,删除,暂停等
- 容器储存层的生命周期和容器一样,任何保存在储存层的数据都会随容器删除而丢失,所以容器不应该向其储存层写入任何数据,任何数据的写入都应该使用数据卷(Volume)或者绑定宿主目录
- 镜像:特殊的文件系统,除了提供容器运行时所需的程序,库,资源,配置等文件外,还包含了一些为运行时准备的一些参数(如匿名卷,环境变量,用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。确保应用环境的一致性
- 仓库(Docker Registry):存放镜像文件的地方。一个Docker Registry 可以包含多个仓库Respository,每个仓库可以包含多个Tag,每个Tag对应一个镜像。 可以通过<仓库名><标签>来指定,镜像+镜像版本。公开服务Docker Resgistry 如官方的Docker Hub。 也可以在本地搭建私有的Docker Registry
- Docker Registry于github有很多相似之处,不同在于github上放的是代码,Docker Registry放的镜像集
![31d43c955fa47f675c2e4c06cfb9c031.png](https://i-blog.csdnimg.cn/blog_migrate/3e28bacf3b9946e83f6e4bcd0b3c47f6.png)
重要命令
build: 构建镜像(文件及其运行的环境)
ship: 运输镜像(主机和仓库间运输)
run: 运行镜像(运行的镜像就是一个容器)