docker 容器

一、docker介绍

docker使用go语言进行开发实现,基于内核的cgroup,namespace,以及AUFS类的UNIon FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于格力的进程独立与宿主和其他的隔离的进程,因此也成为容器。主要代码在github上进行维护。

docker 使用c/s 结构,docker服务端与客户端交互,docker服务端负责构建、运行、分发docker镜像。docker客户端可以和服务端运行在一台机器上,也可通过restful,stock,或网络接口与远程docker服务端进行通信。

docker镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件
外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像只是一个虚拟的概念,有一组文件系统组成,或者多层文件系统联合组成。

分层存储

充分利用UNion FS的技术,将其设计为分层存储的架构。分层存储的特征使得镜像的复用,定制变得更容易。

docker容器

镜像和容器的关系,就像是面向对象程序设计的类和实例一样,镜象是静态的定义,容器是镜像运行的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间,容器可以拥有自己的
root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

容器也是使用分层存储,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。容器存储层要保持无状态化。

镜像仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry 就是这样的服务。一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

cgroup

cgroup全程control group,限制一个进程的资源使用,由linux内核支持,可限制、隔离进程组所使用的物理资源,cpu,磁盘,内存,网络IO,是linux container技术的物理基础。

namespace

namespace 则用来隔离PID(进ID),IPC,Network 等系统资源。

union FS

union FS 可以把文件系统多个目录内容来联和挂载到同一个目录下,而且目录的物理位置是分开的。

二、传统虚拟机与docker的区别

传统虚拟机是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上在运行所需应用进程,而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。容器比传统虚拟机轻便。

传统虚拟化
在这里插入图片描述

docker容器
在这里插入图片描述

三、docker的优势

1)更高效地利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker
对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相
比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

2)更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker
容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

3)一致性运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导 致有些 bug 并未在开发过程中被发现。而
Docker 的镜像提供了除内核外完整的运行时环境,确保 了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题

4)持续交付和持续部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。 使用 Docker
可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通Dockerfile 来进行镜像构建,并结合
持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合
持续部署(Continuous Delivery/Deployment) 系统进行自动部署。而且使用 Dockerfile
使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

5)更轻松地迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上
运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可
以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用 无法正常运行的情况。

6)更轻松地维护和发展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维
护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项 目团队一起维护了一大批高质量的
官方镜像,既可以直接在生产环境使用,又可以作为基础进一步 定制,大大的降低了应用服务的镜像制作成本

在这里插入图片描述

四、docker组件

docker核心组件包括:
1)docker client;
2)docker daemon;
3)docker image;
4)docker registry;
5)docker contriner

1)Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多
Docker 用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与
Docker_Host 进行交互。最常用的 Docker 客户端就是 docker 命令,我们可以通过 docker 命令很
方便地在 host 上构建和运行 docker 容器。

2)Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,
我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过 Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。

docker daemon架构

在这里插入图片描述

Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine
中处理请求,然后根据请求类型,创建出指定的 Job 并运行。 Docker Daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。
运行过程的作用有以下几种可能:
向 Docker Registry 获取镜像
通过 graphdriver 执行容器镜像的本地化操作
通过 networkdriver 执行容器网络环境的配置
通过 execdriver 执行容器内部运行的执行工作

3)将 Docker 镜像看成只读模板,通过它
可以创建 Docker 容器。
镜像有多种生成方法:
从无到有开始创建镜像
下载并使用别人创建好的现成的镜像
在现有镜像上创建新的镜像在这里插入图片描述
4) docker 容器是docker 镜像的运行实例,真正运行项目程序,消耗系统资源、提供服务的地方。docker container 提供系统硬件环境,使用docker image 制作好的系统盘,加上编写好的项目代码,run 后可以提供服务。

五、docker使用存储库安装

1)确保yum包更新到最新

yum  update
reboot

2)卸载旧版本(如果安装过)

yum remove docker docker-common docker-selinux docker-engine

3)安装软件包 yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper驱动依赖的

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

4)设置yum源

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

5)可以查看所有仓库中所有 docker 版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

6)安装docker

yum install  docker-ce

7)启动并加入开机启动

systemctl   start  docker
systemctl   enable   docker

8)验证安装是否成功

docker  version

脚本安装

1)curl -sSL get.docker.com -o get-docker.sh

2)sh   get-docker.sh  --mirror Aliyun
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值