Understanding Docker [Docker理解]
Docker是目前最流行的轻量级虚拟化解决方案,其核心思想在于最小化容器,容器可以理解成最大程度复用宿主机的硬件资源但是保留需要的部分来运行对应程序的“虚拟机”。更直观但是不那么准确的理解是想象成货轮拉着集装箱[就像docker的logo]。在一艘货轮上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。货轮可以理解成宿主机器,集装箱就是容器,那虚拟机就有点类似专门运送水果的货轮和专门运送石油的货轮。
Docker主要有三个重要组件或者工具构成,分别是Docker
, Docker-Compose
, Docker-Swarm
。每个工具都有各自的作用:
- Docker is (in many cases) the core technology used for containers and can deploy single, containerized applications. [Docker就是我们最常用单一应用容器]
- Docker Compose is used for configuring and starting multiple Docker containers on the same host–so you don’t have to start each container separately. [Docker-Compose主要的应用场景是在单一机器上部署多个互相协作的容器]
- Docker Swarm is a container orchestration tool that allows you to run and connect containers on multiple hosts. [Docker-Swarm是在多台机器部署容器来搭建分布式环境]
Docker
Docker Image
Docker的镜像概念类似虚拟机的镜像。它是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。具体来说,镜像是由一层层的系统文件组成,这种层级的文件系统被称为UnionFS。基于这种层级的文件机制,让文件复用成为可能,也大大方便了用户使用或者修改已有的镜像。镜像基于Dockerfile
构建,Dockerfile
是一个描述文件,里面包含了若干条命令,每条命令都会对基础文件系统创建新的层次结构。
Docker Container
Docker容器是根据Docker镜像创建的运行实例。Docker容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的应用,其包含特定应用的代码及所需的依赖文件。容器在启动的时候创建了一层可写层次作为最上层来构成一个新的容器。
Docker Repository
这个仓库一般情况下值得就是Docker Hub,可以想象成Docker版的Github,大家把自己制作好的Docker Image共享出来让其他人也可以使用。
Lifecycle & Commands
Docker Container的生命周期主要包括五种状态:created
,running
,stopped
,paused
,deleted
。图中彩色圆形为Container主要的生命周期状态,而长方形则代表容器在执行某种命令后进入的临时状态。
- docker create: 创建容器后,不会立即启动运行,容器进入初建状态[created]
- docker run: 创建容器,并立即启动运行,进入运行状态[running]
- docker start: 将已经
stopped
的容器转为运行状态[running] - docker stop: 容器将转入停止状态[stopped]
- docker kill: 容器在故障时,执行kill,容器转入停止状态[stopped],这种操作容易丢失数据,除非必要,不建议使用
- docker restart: 重启容器,容器转入运行状态[running]
- docker pause: 容器进入暂停状态[pause]
- docker unpause: 取消暂停状态,容器进入运行状态[running]
- docker rm: 删除容器,容器转入删除状态,如果没有保存相应的数据库,则状态不可见[deleted]
Docker-Compose
Docker-Swarm
Docker Swarm是Docker官方推出的集群管理系统,或者说是在集群环境下的容器编排系统。其实目前主流选项是Kubenetes[k8s],当然如果是进行一个小项目也不复杂,那确实也不用一定上k8s。
Docker Swarm基本架构是也是简单直接,采用经典的manager-worker模式,集群中每个主机运行一个Docker Swarm代理,其中一个主机作为manager,其余的作为worker。manager负责指挥和调度worker上的容器。
Reference
- https://medium.com/@BeNitinAgarwal/lifecycle-of-docker-container-d2da9f85959
- https://www.techrepublic.com/article/simplifying-the-mystery-when-to-use-docker-docker-compose-and-kubernetes/