docker的基础认识

docker基础

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  1. docker Client客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. Docker Container容器

 

Docker相关的核心技术之cgroups:

Linux系统中经常有个需求就是希望能限制某个或者某些进程进行资源分配。于是就出现了cgroups的概念,cgroups就是control group,在这个group中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。cgroups是将任意进程进行分组化管理的Linux内核功能。最初由google工程师提出,后来被整合进Linux内核中

 

cgroups中的重要概念是“子系统”,也就是资源控制器,每种子系统就是一个资源的分配器,比如cpu子系统是控制cpu时间分配。首先挂载子系统,然后才有control group的。比如先挂载memory子系统,然后在memory子系统中创建了一个cgroups节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入,这就是完成了内存的资源限制

 

cgroups被Linux内核支持,有得天独厚的性能优势,发展势头迅猛,在很多领域可以取代虚拟化技术分割资源,cgroups默认有诸多资源组,可以限制几乎所有服务器上的资源:cpu、mem、iops、iobangwide、net、device、acess等

 

Docker相关的核心技术之LXC:

LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。借助于namespace的隔离机制和cgroups限额功能,LXC提供了一套统一的API和工具来建立和管理container。LXC跟其他操作系统层级的虚拟化技术相比,最大的优势在于LXC被整合进了Linux内核,不用单独为内核打补丁

 

LXC旨在提供一个共享kernel的OS级虚拟化方法,在执行对不用重复加载kernel,且container的kernel与host共享,因此可以大大加快container的启动过程,并显著减少内存消耗,容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多,在实际测试中,基于LXC的虚拟化方法的IO和CPU性能几乎接近baremetal的性能

 

显然容器所使用的这种类型的隔离总的来说非常强大,然后不是像运行在hypervisor上的虚拟化那么强壮仍具有争议性。如果内核停止,那么所有的容器就会停止运行

性能方面:LXC>KVM>XEN(由于LXC使用cgroup机制,其性能损坏基本为0。)

内存利用率:LXC>KVM>XEN(LXC只能虚拟化linux。)

隔离程度:XEN>KVM>LXC(由于LXC共用内核,内存利用率最高;其他两种方案每个虚机都需要单独的操作系统占用一部分内存空间。)

 

Docker相关的核心技术之AUFS:

AUFS是一个能透明覆盖一个或多个现有文件系统的层级文件系统,支持将不同目录挂载到同一个虚拟文件系统下,可以把不同的目录联合在一起,组成一个单一的目录。这种是一种虚拟的文件系统,文件系统不用格式化,直接挂载即可。

 

Docker一直在用AUFS作为容器的文件系统。当一个进程需要修改一个文件时,AUFS创建该文件的一个副本。AUFS可以把多层合并成文件系统的单层表示。这个过程称为写入复制(copy on write)

 

AUFS允许Docker把某些镜像作为容器的基础。例如,你可能有一个可以作为为很多不同容器的基础的centos系统镜像。多亏AUFS,只要一个centos镜像的副本就够了,这样既节省了存储和内存,也保证更快速的容器部署。

 

使用AUFS的另一个好处是Docker的版本容器镜像能力。每个新版本都是一个与之版本的简单差异改动,有效的保持镜像文件最小化。但这也意味着你总是要有一个记录该容器从一个版本到另一个版本改动的审计跟踪。

 

mac 上docker安装

使用 Homebrew 安装

macOS 我们可以使用 Homebrew 来安装 Docker。

Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:

$ brew cask install docker

==> Creating Caskroom at /usr/local/Caskroom
==> We'll set permissions properly so we won't need sudo in the future
Password:          # 输入 macOS 密码
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺  docker was successfully installed!

在载入 Docker app 后,点击 Next,可能会询问你的 macOS 登陆密码,你输入即可。之后会弹出一个 Docker 运行的提示窗口,状态栏上也有有个小鲸鱼的图标()。


手动下载安装

如果需要手动下载,请点击以下链接下载 Stable 或 Edge 版本的 Docker for Mac。

如同 macOS 其它软件一样,安装也非常简单,双击下载的 .dmg 文件,然后将鲸鱼图标拖拽到 Application 文件夹即可。

从应用中找到 Docker 图标并点击运行。可能会询问 macOS 的登陆密码,输入即可。

点击顶部状态栏中的鲸鱼图标会弹出操作菜单。

第一次点击图标,可能会看到这个安装成功的界面,点击 "Got it!" 可以关闭这个窗口。

启动终端后,通过命令可以检查安装后的 Docker 版本。

$ docker --version
Docker version 17.09.1-ce, build 19e2cf6

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

在任务栏点击 Docker for mac 应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

之后我们可以通过 docker info 来查看是否配置成功。

$ docker info
...
Registry Mirrors:
 http://hub-mirror.c.163.com
Live Restore Enabled: false

linux下docker安装:

安装docker,采用添加docker的repo:

1、安装必要的包支持

# yum install -y yum-utils device-mapper-persistent-data lvm2

2、配置添加docker稳定版本仓库

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker-ce

# yum install docker-ce

安装docker-ce也就一个核心包docker-ce,外加一个依赖包

如果利用上述添加的docker源下载安装速度缓慢,可以将docker-ce的包下载到本地进行安装

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

如果安装的系统存在之前的docker旧的版本,需要先将旧版本低额docker的包remove掉,然后删掉数据目录,默认的数据目录/var/lib/docker

 

启动docker服务:

# systemctl start docker

查看启动过程日志:

# tail -f /var/log/messages |grep docker

校验docker是否安装成功,执行hello-world镜像

# docker run hello-world

这条命令的执行过程:

1、先从本地查看是否有这个镜像

2、如果在本地没有这个镜像,那么就从docker-hub上面进行拉取,并启动container

 

还有一种安装方式采用脚本安装:

# curl -fsSL get.docker.com -o get-docker.sh
# sh get-docker.sh(详见官方文档)

将docker服务配置开机启动:

# systemctl enable docker

卸载docker:

# yum remove docker-ce
# rm -rf /var/lib/docker

参考文章:

https://blog.csdn.net/qq_27981847/article/details/80400448

https://www.cnblogs.com/jsonhc/p/7754247.html