资讯专栏INFORMATION COLUMN

Docker学习之基本概念及安装(1)

lvzishen / 312人阅读

摘要:分层存储因为镜像包含操作系统完整的文件系统,其体积往往是庞大的,因此在设计时,就充分利用的技术,将其设计为分层存储的架构。分层存储的特征还使得镜像的复用定制变的更为容易。

什么是Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低.

Docker与传统的虚拟机相比有哪些优势呢?

首先来看传统虚拟机与Docker的对比图:

可以看出传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便

为什么需要Docker
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势

对于系统资源的利用更加的高效:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高

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

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

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

更轻松的迁移:由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。更轻松的维护和扩展:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。

那么接下来针对Docker的三个基本概念进行了解。

Docker的基本概念

Docker 包括三个基本概念:

镜像( Image )

容器( Container )

仓库( Repository )

理解了这三个概念,就理解了 Docker 的整个生命周期。

镜像Docker

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

分层存储

因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在
Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以
严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其
实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系
统联合组成。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的
镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜
像。

容器( Container )

镜像( Image )和容器( Container )的关系,就像是面向对象程序设计中的类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。

Docker Registry

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库( Repository );每个仓库可以包含多个 标签( Tag );每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。以 Ubuntu 镜像 为例, ubuntu 是仓库的名字,其内包含有不同的版本标签,如, 16.04 , 18.04 。我们可以通过 ubuntu:16.04 ,或者 ubuntu:18.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu ,那将视为ubuntu:latest 。

Docker的安装
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE即企业版,强调安全,付费使用,支持周期 24 个月。这里就演示在ubuntu下进行Docker的安装了。

第一步:卸载旧版本。旧版本的 Docker 称为 docker 或者 docker-engine ,使用以下命令卸载旧版
本:

sudo apt-get remove docker 
docker-engine 
docker.io

第二步:使用 APT 安装。由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要
添加使用 HTTPS 传输的软件包以及 CA 证书。

$ sudo apt-get update
$ sudo apt-get install 
apt-transport-https 
ca-certificates 
curl 
software-properties-common

第三步:启动 Docker CE:

$ sudo systemctl enable docker
$ sudo systemctl start docker

第四步:检测是否安装成功,这个时候需要运行一个镜像容器,看能否成功:

$docker run hello-world

如果你也看到类似的页面信息,那么恭喜你安装成功。接下来可以为其进行用户分组操作。

默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将
需要使用 docker 的用户加入 docker 用户组。
建立 docker 组

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

接下来可以愉快地进行Docker的学习了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27915.html

相关文章

  • Docker习之Docker Swarm

    摘要:是官方三剑客项目之一,提供容器集群服务,是官方对容器云生态进行支持的核心方案。工作节点是任务执行节点,管理节点将服务下发至工作节点执行。 Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容...

    DobbyKim 评论0 收藏0
  • 这是一次 docker 入门实践

    摘要:前言其实接触也有一段时间了,但是一直没有做下总结,现在网上关于的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧。实现目标安装探索基本概念及用法环境准备位,内核版本不低于安装以下命令均需在权限下执行。 showImg(https://segmentfault.com/img/remote/1460000017894270?w=538&h=344); 前言 其实接触 do...

    ashe 评论0 收藏0
  • 深入理解 Laravel Eloquent(一)——基本念及用法

    摘要:原文发表在我的个人网站深入理解一基本概念及用法在本系列文章中,我将跟大家一起学习的基本用法,探索的各种高级功能,理解背后的运行原理,并最终达到深入理解灵活使用的目的。下一步深入理解二中间操作流 原文发表在我的个人网站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我将跟大家一起学习 Eloquent 的基本用法,探索 Eloquent 的各种...

    Edison 评论0 收藏0
  • 树莓派习笔记(六)交叉编译念及安装使用

    摘要:一交叉编译概念什么是交叉编译交叉编译是在一个平台上生成另一个平台上的可执行代码。也要树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 ...

    songze 评论0 收藏0
  • Swoole难上手?从EasySwoole开始

    摘要:组件提供了很多实用的组件包括控制台组件定时器触发器日志处理等等致谢从下一章开始,我们逐步使用的各项功能并开发一个简单的并发版爬虫系统,感谢你看到这里,希望本文可以帮到你,谢谢 showImg(https://segmentfault.com/img/bVbpts4?w=640&h=160); 前言 我一生的文章都会放在这里,我的博客,我希望每一行代码,每一段文字都能帮助你。https:...

    lavor 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<