docker overview
本文完全翻译docker文档。 https://docs.docker.com/engine/docker-overview 作为docker的概述,个人觉得很合适。
docker是一个运行软件的平台,docker把你的应用从你的基础设施中分离开来,所以你能快速的进行软件交付。使用docker,你能用管理应用application的方法管理你的基础设施。使用docker,你能够有效减少你写代码和跑代码的时间。
The Docker platform
docker提供了一种叫容器的东西,他能够提供宽松的隔离环境来打包和运行应用。这种隔离性和安全性让你在一台机器上来同时运行许多容器。容器因为无需额外的hypervisor所以变的十分的轻量,能够直接运行在宿主机的内核之中,这就意味着你能够在已有的硬件基础上运行更多的容器,而不是使用虚拟机。你甚至能够在虚拟机中再次使用docker容器。(这段话看不懂,请看我的这篇docker VS VM )
docker提供工具和平台来管理容器的生命周期:
- 开发你的应用,它支持docker
- 容器成为分配和测试应用的基本单元
- 使用容器将应用部署在生产环境中,不管你的是云、本地还是两者集合的环境都可以。
docker Engine
docker Engine 是一个CS应用,它包含以下的组件:
- 服务端:一个叫做daemon的长期运行程序(dockerd comand)
- REST API:一个接口,通过它来告诉daemon然后命令它做什么
- 命令行接口CLI客户端(docker command)
CLI呢,通过脚本或者直接cli commands调用docker REST API来控制docker daemon。其它的docker applications 使用内置的API 或者 CLI。daemon 创建并且管理docker objects 比如 images,containers,networks and volumes。
What can I use Docker for?
Fast, consistent delivery of your applications
快速一致的交付你的应用
docker允许让开发人员工作在、提供应用和服务的本地容器的标准化环境中,以此来简化开发的生命周期。(这句话翻译不太好,水平有限,但无关紧要)。容器在持续集成和持续交付环境中是很棒的。
考虑以下的几个场景:
- 开发者在本地写好了代码然后用docker分享给同事
- 他们使用docker将应用推送至测试环境中,然后自动化执行并且手工测试。
- 当开发者发现bug的时候,在生产环境中测试然后重新部署在测试环境中来进行测试和验证。
- 当测试完成时,将修复版给客户就像将更新过后的镜像推到生产环境中一样简单。
Responsive deployment and scaling
docker容器化的平台提供了高度轻便化的工作量。docker容器可以运行在n多个平台上。(跳过,没啥用)
Running more workloads on the same hardware同样的硬件做更多的事情
docker是轻量的快速的,比起"hypervisor-based vm",能更有效的利用资源。(docker VS VM 可以知晓为什么。)这样就能使用更多的计算能力去实现你的商业目标。docker能够让你用更少的资源做更多的事情。
Docker architecture
CS 架构,Docker CLI 告知docker daemon build run distribute 容器,这是一个重活。client 和 server端能够同在一个系统上,或者本地client连接远程server。docker client 和 docker 通过REST API交流。socket或network接口。
The Docker daemon
Docker的 daemon 监听 Docker API请求来管理docker 对象,images, containers, networks, and volumes 等,daemon之间相互通信来管理docker服务。(这边多个daemon不理解)
The Docker client
docker(docker
)客户端是许多docker使用者和docker交互的主要方式,比如docker run,客户端会将这些命令传递给dockerd 来执行它们,docker
命令使用Docker的API,客户端能够同时与多个daemon进行通信。
Docker registries
Docker registry 存储docker镜像,Docker Hub是一个公共的registry,所有人都能使用。Docker 默认是从Docker Hub里面寻找对应的image,也可以运行私有的registry。
docker pull命令和docker run命令,需要的镜像会从配置的registry拉取,同样docker push 会进行push操作。
Docker objects
IMAGES
一个镜像是只读的,一个镜像会带着额外的组件而依赖于另一个镜像。比如,创建一个以ubuntu
为基础的镜像,然后安装Apache web和应用,进行配置后,让自己的app跑起来。
可以使用DockerFile去定义步骤来创建自己的image然后运行,每一个指令会创建一层image,当你改变DockerFile然后重建镜像的时候只有改动过的层需要重建。(这个还是挺有用的之后会进行研究)这是相比其它虚拟技术一部分让镜像变得轻量、小、快的原因。
CONTAINERS
一个容器是包含一个镜像可运行的实例,你能够通过使用Docker API,CLI 来create, start, stop, move, or delete 一个容器。你能够给一个container配置网络,存储甚至是创建一个基于已有状态的新image。
默认container和其它container包括宿主机是相对隔离的,并且是可以控制的。
一个容器被定义一个image,伴随着各种配置。当容器被移除的时候,任何未持久化存储的改动会消失。
Example docker run command
$ docker run -i -t ubuntu /bin/bash
一条命令的过程:
- 如果本地没有镜像会从已经配置的registry去拉去,就像手动执行了
docker pull ubuntu
- docker 创建了一个新的container就像自己手动执行了
docker container create
一样. - Docker 分配读写文件系统给container 当做最终层,让一个运行中的容器可以贼本地文件系统中创建和修改文件和文件夹。
- Docker不需要你指定网络选项就可以, 创建网络结构让container连接到默认网络,包括给container分配ip。默认containers可以通过宿主机网络来连接到其它网络。
- docker启动容器,运行
/bin/bash
因为-i -t 所以你能够获取交互式命令行。 - exit退出,但是不会删除,可以重启等。
SERVICES
笔者不懂,所以不翻译了。有难度。
The underlying technology
内部的技术,不适合我们新手学,等会基本的之后再看。