docker初识(一)

docker是一个用于开发,发布,运行应用的平台,可以管理应用的同时管理平台,开发者只用关心应用的开发,而不需要再去关注开发环境与生产环境之间的差异。

docker 平台

docker 可以在容器内打包和运行应用,容器是一个相对分离的环境,允许在一个主机上运行多个容器,容器不需要多余的虚拟机管理程序,所以它是轻量级的,相比于虚拟机,硬件上可以更多的容器,甚至可以在虚拟机上运行docker容器。

docker提供平台和工具管理容器的生命周期

docker引擎

docker引擎是一个C-S应用,包含以下几个主要部件:docker 引擎

  1. 服务器 :是一个长时间运行的守护进程(dockerd),守护进程创建和管理docker对象,比如images,container,network,volume
  2. REST API:定义了开发者与守护进程的交互API
  3. CLI:客户端命令接口(docker)

docker架构

docker的客户端和服务器可以安装在同一个系统中,或者客户端可以连接docker远程服务器,客户端和守护程序之间的沟通的API建立在UNIX sockerts 或者网络接口上。
在这里插入图片描述

docker daemon

守护进程(dockerd)监听来自docker api的请求,并且管理docker对象。守护进程同时可以和其他的守护进程进行交互

docker client

一个docker客户端可以和多个守护进程进行沟通

docker registries

docker注册处存储docker镜像, docker hub是公开的仓库,同时也可以运行私人的注册处

docker objects

镜像

镜像是一个只读的模板用来知道创建一个docker容器,通常,一个镜像都是建立在另一镜像之上,然后添加一些个性化的操作。比如,在ubuntu镜像上安装Apache web server 和自己的应用。

创建自己的镜像时,先创建一个Dockerfile, 定义一些步骤然后运行,每个步骤在镜像中创建一个layer,当改变Dockerfile时,只有发生变化的layer会重新build,这也是与虚拟机相比,镜像为什么是轻量级 以及迅速的。

容器

容器是镜像的一个可运行实例,可以使用docker API或者命令行create, start, stop, move 或者delete容器。

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

运行以上代码时(假设使用默认的注册配置),docker会进行以下操作:

  1. 如果本地没有ubuntu镜像,从注册处拉取镜像,类似命令docker pull ubuntu
  2. 创建一个容器, docker container create
  3. 给容器分配一个读写文件系统,作为容器的最后一个layer, 这使得容器能够在它的文件系统中进行文件的创建和修改。
  4. 如果没有网络配置,docker 会根据默认配置创建一个网络接口,这包括给容器分配ip地址,容器默认能够连接主机的网络。
  5. docker开启容器,并运行/bin/bash, -i,-t 参数让容器以交互式终端的形式运行。
  6. 在/bin/bash的中断里运行exit命令,容器终止,但是并没有remove, 可以重新开启容器或者remove容器。
services

services可以跨多个docker守护进程来扩展进程,

底层技术

docker使用go语言编写,它利用了Linux内核的一些特性来提供它的功能。

命名空间

docker使用命名空间来提供独立的workspace, 这些独立的workspace就是容器。当运行一个容器时,docker会为该容器创建一个命名空间集合。

命名空间提供了一层隔离,容器的每部分功能运行在一个独立的命名空间内。

Docker Engine uses namespaces such as the following on 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

linux的docker引擎还使用了control groups (cgroups)技术. 它控制应用只能使用一部分资源. Control groups 使得 Docker Engine 能够在容器间共享硬件资源。

Union file systems

Union file systems用来创建layer , Docker Engine还可以使用UnionFS变异的其他系统,包括 AUFS, btrfs, vfs, and DeviceMapper.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值