1. 简介
Docker 是一个开源的应用容器引擎,基于Go语言实现;
Docker是一个开发、传输和运行应用程序的开放平台,可以将应用程序与基础架构分离,实现快速交付。
1)Docker引擎,是一个client-server的应用,包含以下组件:
server:一个长期运行的守护进程dockerd
rest api:用于与守护进程沟通并指导做什么的程序接口
client:command line interface(CLI) 客户端docker
客户端使用Docker API通过脚本或直接CLI命令来实现对Docker守护程序的控制和交互。 守护进程创建和管理Docker对象,例如映像,容器,网络和卷。
2)Docker架构
采用client-server架构,包含:daemon(守护进程)、client(客户端)、registry(仓库)。
- 守护进程监听Docker
API请求,创建和管理各docker对象,包括images(镜像)、containers(容器)、networks、volumes、plugins和其他对象。 - Docker客户端用来用户与Docker服务端进行交互,比如用户输入指令docker run,客户端会下发给dockerd。
- registry为镜像仓库,通过docker pull 或 docker run从仓库去拉取镜像,用docker push推送镜像到仓库。
- image(镜像):就是用于指导创建容器的只读模板。
- container(容器):就是一个镜像的可运行实例。
3)示例 docker run command
当执行该命令“docker run -i -t ubuntu /bin/bash”后,发生了什么:
如果本地没有ubuntu镜像,Docker会从配置的仓库中拉取对应的镜像,就像手动执行docker pull ubuntu
- Docker创建一个新的容器(container),就像手动执行docker container create
- Docker会给容器分配一个读写文件系统作为最后一层(final layer),允许容器在这个本地文件系统中创建或修改文件和文件夹
- Docker给容器创建网络接口,包括分配IP地址;默认情况下,容器可以使用主机的网络连接连接到外部网络
- Docker启动容器并执行/bin/bash,由于使用了-i
-t,容器会交互式运行,即运行日志会直接显示在终端上,可以直接在终端上进行输入输出 - 可以通过exit退出/bin/bash,容器会停止但不会移除。
4)底层技术
Docker是用Go语言编写的,利用Linux内核的几种特性来实现其功能。Docker使用的技术叫namespaces,用来为容器提供隔离的工作区;当运行一个容器时,Docker会为容器创建一系列的namespaces。这些namespaces提供了隔离层,容器的每一方面都运行在独立的namespaces 中,并且访问权限仅限于这些namespaces。当然也还有其他的而隔离技术:cgroups、UnionFS 等。
2. 优点
1)启动很快,没有额外的开销
2)一键(单命令)部署,简单到安装一个应用只需输入一行命令
3)预配置应用,可以在(公共)应用镜像的基础进行个性化修改
4)资源隔离,基于各自应用或服务,进行设置、监听、调整
5)一致性,一次配置各处部署
6)一个完整的平台,包括:Base Engine,容器的基础引擎;Compose,整合编排复杂的部署;Swarm,用以管理Docker集群;Machine,负责供给。可以非常轻松地管理系统的整个生命周期。
7)扩展性,微服务扩展
3. 适用场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
参考:
https://docs.docker.com/engine/docker-overview/