docker学习笔记
简介
Docker是一个用于开发,发布和运行应用程序的开放平台。 Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。 借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。 通过利用Docker的快速交付,测试和部署代码的方法,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。简单来说就是将应用的运行环境和应用分开了,更方便的管理应用的运行环境。
docker 可以让应用快速化部署,测试和交互。它可以使用容器,让应用隔离,安全的运行。在同一台机器可以同时运行多个容器,它是直接跑在机器的内核上的,对比传统的虚拟机它更加轻量。它可以运行在主机,虚拟机上。
它支持组件方式容器化部署应用,容器作为你分发和测试的单元,部署到本地数据中心或云服务或者两者结合它们的工作原理都相同
应用场景
CI(continuous integrate)/CD(continuous delivery)工作流模式。
当你在生产环境构建好你的应用后你可以快速的将它容器化推送到测试环境中进行测试,当你的应用出现了bug时你修复好了之后可以再次将它推送到测试环境,测试通过后它就可以推送到生产环境。
响应时部署和扩容
容器化应用的轻量性和可移植性,可以根据业务需求实时扩展和删除应用。
在相同的硬件下运行不同应用
因为它的隔离性和轻量性,可以在同样的硬件环境下,运行多个工作负载。
概念和架构
docker 引擎是一个客户端服务器应用架构,它有三个主要的组件:
- 长时间后台运行的守护进程。(
dockerd
命令行) REST API
应用接口,可以连接和操作守护进程。- 命令行接口客户端 (
docker
命令行)
架构图如下:
docker 守护进程监听 docker API
请求和管理镜像(image),容器(container),网络(network),存储卷(volume)
docker 客户端可以运行命名通过 REST API
发送到 dockerd
中,获取结果到命令行上。
docker registry 是存储镜像的仓库,有一个 Docker Hub 是一个公有的镜像仓库。
镜像
它是一个只读的模板,包括了创建 docker 容器的说明。一个镜像通常依赖其他镜像并在其之上做一些定制化。如使用 ubuntu
镜像,安装你自己应用需要的环境,构建出镜像。
容器
它是镜像的一个实例,你可以创建,启动,停止和删除。
服务
依赖多个 docker daemon ,扩展容器服务,形成集群,负载均衡的访问各个节点的服务。
命名空间
它提供了隔离的工作空间 container
,当创建一个 container 时,docker 会为该容器创建一组命名空间。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
在 Linux 下使用了如下命名空间:
- The
pid
namespace: Process isolation (PID: Process ID). - The
net
namespace: Managing network interfaces (NET: Networking). - The
ipc
namespace: Managing access to IPC resources (IPC: InterProcess Communication). - The
mnt
namespace: Managing filesystem mount points (MNT: Mount). - The
uts
namespace: Isolating kernel and version identifiers. (UTS: Unix Timesharing System).
Control groups
该技术可以限制应用使用的资源大小。
Union file systems
Docker Engine使用UnionFS为容器提供构建模块。 Docker Engine可以使用多个UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。
容器格式
docker engine 联合了以上三种技术就叫做容器格式,默认的容器格式是 libcontainer
。