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