文章目录
0. 前言
- 教程链接
- 本文内容主要包括
- Docker基本概念:Docker是什么,能做什么
- Docker的组成:从程序实现角度看、从用户使用角度看
1. Docker 基本概念
1.1. Docker 是什么
- Docke主要用于于应用环境的开发、迁移、运行。
- Docker可以令不同应用有不同的环境,方便开发与部署。
- 对我来说帮助比较大的解释是:
- 发布的时候,不仅发布程序,也发布环境。
1.2. Docker能做什么
- 提供了“容器”功能
- 未不同的程序提供不同的环境,每个环境就是一个“容器”
- “容器”这个词很好的体现了多个环境之间是相互隔离的
- 容器提供的功能与“虚拟机”类似,可以理解为“轻量化”的虚拟机。具体细节我也不懂,也没打算细看。
- 我为什么要学Docker(算法工程师日常工作中的Docker)
- 多人用同一台服务器时,如果需要用不同的cuda版本,就会很麻烦。虽然conda提供了不同环境的cuda,但其实还是有问题的。
- 其实各种软件的安装真的是老大难问题,比如不同版本的opencv啥的……
2. Docker 组成
2.1. Docker Engine
- 从程序实现角度看,Docker分层如下图所示(官方配图)
- Server:长时间运行的守护进程,其他
- REST API:定义了与守护进程通信的接口。
- Client(docker CLI):命令行工具,调用了REST API。
- Objects:container、image、network、data volumes
2.2. Docker architecture
- 从使用角度看,Docker分为以下几个部分(官方配图)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SYzEjBha-1610864978881)(https://zhangyiyang-blog.oss-cn-hangzhou.aliyuncs.com/20210116223209.svg)]
- 其中几个主要组件介绍如下
- Client:用户工具,通过与Docker daemon通信从而控制各个Objects的
- Docker Host
- Docker daemon:守护进程,client就是通过与守护进程通信,达到控制容器、镜像的目的。
- 容器、镜像:后面介绍
- Registry:镜像仓库
- 镜像与容器单独介绍
- 推荐看看 这篇博客
- 镜像:
- Docker中的镜像是只读的
- Docker中的镜像一般是有层次结构的,即一个镜像一般都要依赖于其他一系列镜像
- 我们可以直接从镜像仓库中获取已有镜像,也可以通过Dockerfile来自行创建。
- Dockerfile的每一行就会创建一个镜像,在重复运行同一个Dockerfile时,只会从修改了的那一行开始重新运行。
- 容器:
- 可运行的容器,可以新建、启动、停止、移动、删除一个容器。
- 默认情况下,每个容器之间是相互独立的。
- 一个容器是通过对应镜像以及相关配置信息组成的,删除了容器后就会删除其相关配置。
- 容器大概就是在镜像层(只读层)上面加了一层读写层。
3. 其他
-
docker run
命令举例,以后详细看,现在不关心。 -
官方教程还介绍了底层技术(underlying technology),不关心,没细看。