Docker学习之基本概念及安装
什么是DockerDocker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低.
Docker与传统的虚拟机相比有哪些优势呢?
首先来看传统虚拟机与Docker的对比图:
https://p3-sign.toutiaoimg.com/pgc-image/6e1b444af4b2414fb9a3098b556c77bf~tplv-tt-large.image?x-expires=1973025744&x-signature=qgmeVnE3lZMgdfrBQ5wFM8dh6Cs%3D
https://p3-sign.toutiaoimg.com/pgc-image/c87cccdf0d4946158714c3a620f708a1~tplv-tt-large.image?x-expires=1973025744&x-signature=0JMzZB27ZiVIXvSesFHEP1qp6zs%3D
可以看出传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便
为什么需要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
https://p3-sign.toutiaoimg.com/pgc-image/37d6d5f7ae6e46359fb62a9f52cef234~tplv-tt-large.image?x-expires=1973025744&x-signature=ji4%2B%2BuFmMBy%2Bc4AXdd1Sea9TVnY%3D
第二步:使用 APT 安装。由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要
添加使用 HTTPS 传输的软件包以及 CA 证书。
$ sudo apt-get update$ sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common
https://p3-sign.toutiaoimg.com/pgc-image/0e5e108620cb43ef9e18073f6eb51778~tplv-tt-large.image?x-expires=1973025744&x-signature=RRy%2FHJ2GFS3m9mnI45R1REUiVSQ%3D
https://p3-sign.toutiaoimg.com/pgc-image/1c0016a8fea9419ca2477e06a1dfd9a8~tplv-tt-large.image?x-expires=1973025744&x-signature=LFJi%2BtcijBgHIlOdMGv26ecRrLU%3D
第三步:启动 Docker CE:
$ sudo systemctl enable docker$ sudo systemctl start docker
https://p3-sign.toutiaoimg.com/pgc-image/126d1b8bbb454746957c78aec5111c66~tplv-tt-large.image?x-expires=1973025744&x-signature=np8GZi%2BZkZPrMaoYeX4nnY4wpWs%3D
第四步:检测是否安装成功,这个时候需要运行一个镜像容器,看能否成功:
$docker run hello-world
https://p3-sign.toutiaoimg.com/pgc-image/f50d5ee1fe614957b9b436f79a2e8714~tplv-tt-large.image?x-expires=1973025744&x-signature=6f%2B2gju5Sunfc3GLj9k04uOWdx8%3D
如果你也看到类似的页面信息,那么恭喜你安装成功。接下来可以为其进行用户分组操作。
默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将
需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
接下来可以愉快地进行Docker的学习了。
欢迎大家评论讨论哦,无论你是大神还是小白,都可以私信小编“学习”加群领取前端学习资料哦
页:
[1]