Docker笔记

Docker简介

Docker提供了一种在container(容器)中运行程序的方式,来实现程序的隔离和安全。在一台机器上可以同时运行多个container。跟VM(虚拟机)相比,container之间相互独立,但是共享OS、以及必要的bins/librarys,部署速度更快,资源开支更少,也更容易迁移。

Docker engine

Docker engine是一个client-server应用程序,包括如下几个部分:

  • server是一个daemon(守护进程),负责创建和管理docker对象
  • REST API 提供了与daemon交互的接口
  • CLI是 command line interface client,利用REST API通过脚本或者是命令来跟daemon交互。用户与daemon的交互都需要通过client来进行。

daemon管理的docker对象,包括images、containers、networks、data volumes等。

Docker架构

Docker的主要组件

  • Docker images:只读的模板,用于创建docker container。Docker image是构建组件。
  • Docker registries:image仓库或者分发中心,如Docker Hub,提供public和private权限的存储,可上传和下载images。Docker registery是分发组件。
  • Docker container:类似一个directory,包含一个应用程序运行所需的所有内容。container之间都是隔离的、安全的。container是运行组件。
Docker image

Docker image包含多个层(其实就对应了挂载的目录),通过union file systems 将这些层合并到一个image中。多层的好处是,当一个image做了修改,只需要更新相应的层,不需要替换掉整个image,分发和部署更快更简单。

每个image都是起源于一个基础image。在一个叫Dockerfile的文件中储存了build一个image的指令,如:

  • 运行一条命令
  • 添加一个文件或者目录
  • 创建一个环境变量
  • 从该image启动一个container时运行的程序
Docker container

当Docker从image启动一个container,会在只读的image之上增加一个读写层(所做的修改都会写到这一层中,不影响image本身)。

通过docker程序或者API,Docker client会通知Docker daemon启动一个container:

$ docker run -i -t ubuntu /bin/bash

运行一个container至少需要指定如下部分:

  • container从哪个image来构建,如ubuntu
  • 当container启动时,需要运行哪个程序,如/bin/bash

当执行以上指令后,Docker engine会做顺序完成如下工作:

  • 检测ubuntu镜像,如果不存在,就从Docker Hub来pull
  • 使用image来创建一个新的container
  • 分配一个文件系统并挂载一个读写层
  • 分配网络接口,用于container同宿主机通信
  • 设置一个IP地址
  • 执行指定的程序
  • 终端打印程序输出

Docker技术基础

Docker使用Go语言开发,利用了若干内核特性:

  • Namespaces:通过namespaces技术来提供工作空间的隔离。
  • Control groups(cgroups):隔离container使用的资源,如内存、cpu等。
  • Union file systems(UnionFS):通过创建层来运行的文件系统。把不同物理位置的目录合并挂载到同一个目录中,按照挂载目录的顺序形成层。可以指定每层的读写权限,一般默认是最上层可读写,下面各层都是只读。
  • Container format:Docker组件的封装称为container format。默认container format是libcontainer。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值