【Docker入门】

发布文章

"qq_41964425"





@


所谓Docker



Docker最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,于2013年3月以Apache2.0授权协议开源,主要项目代码在GitHub上进行维护.



Docker使用Google公司推出的GO语言进行开发实现.



Docker是Linux容器的一种封装,提供简单易用的容器使用接口,它是最流行的Linux容器解决方案.



Docker的接口相当简单,用户可以方便的创建、消费容器.



Docker将应用程序与程序的依赖打包在一个文件内,运行这个文件就会生成一个虚拟容器.



程序运行在虚拟容器里,如同在真实物理机上运行一样,有了Docker,就不用担心环境问题了.


Docker应用场景

  • web应用的自动化打包和发布.
  • 自动化测试和持续集成、发布.
  • 在服务型环境中部署和调整数据库或其它应用.

Linux容器

由于虚拟机的诸多问题,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写LXC).

.

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,在正常的进程外面套了一个保护层,对于容器里面的进程来说,它接触的资源都是虚拟的,从而实现和底层系统的隔离.

.

---------⬇️

容器相比于虚拟机的优势:

.

1.启动快

容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程.

启动容器就是启动本机的一个进程,而不是启动一个操作系统,所以速度快很多.

.

2.资源占用少

容器只占用需要的资源,不占用那些没有用到的资源.

虚拟机由于是完整的操作系统,不可避免要占用所有资源.

另外,多个容器之间可共享数据,虚拟机都是独享资源.

.

3.体积小

容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多.

---------⬆️

.

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小很多.

Docker架构



Docker VS 虚拟机


Docker的优势

更高效的利用系统资源

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

无论是应用执行速度、内存损耗、文件存储速度,都要比传统虚拟机技术更高效.

相比于虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用.

.

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用程序则可以做到秒级、甚至毫秒级的启动时间.

Docker容器运行于宿主内核,无需启动完整的操作系统,启动秒级,大大的节约了开发、测试、部署的时间.

.

一致的运行环境

开发过程中一个常见的问题就是环境一致性问题,由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现.

而Docker的镜像提供了除内核外,完整的运行时环境,确保了应用运行环境的一致性.

.

持续交付和部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行.

使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署.

开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration)系统进行集成测试.

而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署.

而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以更容易理解应用运行环境,也方便了运维团队理解应用运行所需条件,帮助我们更好的在生产环境中部署该镜像.

.

更轻松的迁移

由于Docker确保了执行环境的一致性,使得应用的迁移更加容易.

Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的.

因此很多用户可以很轻松的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的问题.

虚拟化+容器


Docker三大概念

Docker整个生命周期就这三个概念:

  1. 镜像 image
  2. 容器 container
  3. 仓库 repository

---------⬇️

Docker镜像

一个只读的模版(例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面安装了Apache或用户需要的其它应用程序.)

镜像可以用来创建Docker容器.

Docker提供了一个很简单的机制来创建或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用.

.

docker容器(container)

image和container的关系,就像面向对象程序设计中的类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object).

容器可以被创建、启动、停止、删除、暂停,Docker利用容器来运行应用.

.

Docker仓库(repository)

仓库是集中存放镜像文件的场所,容易把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分.

实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag).

仓库分为公开仓库(Public)和私有仓库(Private)两种形式.

最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载,国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问.

当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了.

注意:Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务.

---------⬆️


安装使用Docker

安装

Docker软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要 运行下面的 yum 命令:

[root@fedora ~]# yum -y install docker

安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

[root@fedora ~]# systemctl start docker

查看Docker版本,方式一:

[root@fedora ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-61.git9cb56fd.fc28.x86_64
Go version: go1.10.3
Git commit: 1556cce-unsupported
Built: Wed Aug 1 17:21:17 2018
OS/Arch: linux/amd64 Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-61.git9cb56fd.fc28.x86_64
Go version: go1.10.3
Git commit: 1556cce-unsupported
Built: Wed Aug 1 17:21:17 2018
OS/Arch: linux/amd64
Experimental: false

查看Docker版本,方式二:

[root@fedora ~]# docker info

以上是使用CentOS7软件源提供的Docker安装程序,当然你也可以按照官方文档安装.


使用

加速Docker镜像的下载:

[root@fedora ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

开始玩转Docker

# 下载 hello-world 镜像
[root@fedora ~]# docker pull hello-world # 下载一个ubuntu image文件,然后以image启动容器来玩转ubuntu系统
[root@fedora ~]# docker pull ubuntu:14.04 # 同样,还可以玩转CentOS系统
[root@fedora ~]# docker pull docker.io/centos

关于Docker的基本命令,可见此文献:【Docker基本操作】


补充知识

关于image的分层存储:



因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构.

镜像不是ISO那种完整的镜像包,而是一个虚拟的概念,它不是一个完整的文件,是由一组文件组成,或者多组文件系统联合组成.

当使用 docker run 来创建容器时,Docker在后台运行的标准操作如下

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载.
  2. 利用镜像创建并启动一个容器.
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层.
  4. 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去.
  5. 从地址池配置一个ip地址给容器.
  6. 执行用户指定的应用程序.
  7. 执行完毕后容器被终止.

Docker Registry



Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务.

一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像.

.

最常使用的Registry公开服务是官方的Docker Hub,这也是默认的Registry,并拥有大量的高质量的官方镜像.

除此以外,还有CoreOS的Quay.io,CoreOS相关的镜像存储在这里.

Google的Google Container Registry,Kubernetes的镜像使用的就是这个服务.

.

由于某些原因,在国内访问这些服务可能会比较慢.

国内的一些云服务商提供了针对Docker Hub的镜像服务(Registry Mirror),这些镜像服务被称为加速器.

常见的有阿里云加速器、DaoCloud加速器、灵雀云加速器等.

.

使用加速器会直接从国内的地址下载Docker Hub的镜像,比直接从官方网站下载速度会提高很多.

国内也有一些云服务商提供类似于Docker Hub的公开服务.

比如时速云镜像仓库、网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等.

Markdown 6435 字数 197 行数 当前行 1, 当前列 0 HTML 4251 字数 151 段落

【Docker入门】的更多相关文章

  1. 第三章 Docker 入门

    第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...

  2. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  3. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  4. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

  5. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  6. Docker入门教程(五)Docker安全

    Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...

  7. Docker入门教程(四)Docker Registry

    Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...

  8. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  9. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  10. Docker入门教程(一)介绍

    http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了 ...

随机推荐

  1. layDate1.0正式公布,您一直在寻找的的js日期控件

    你是时候换一款日期控件了,而layDate很愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外全部从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心 ...

  2. [数位dp] bzoj 3209 花神的数论题

    题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdlib" #include"c ...

  3. Java transientkeyword使用小记

    1. transient的作用及用法 我们都知道一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化,java的这样的序列化模式为开发人员提供了非常多便利.我们能够不必关系详细序列化 ...

  4. 一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

    这两天加班,不能兼顾博客的更新.请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容.而我们又想像数据库那样能直接体如今查询中.这里就是我们所说的增量索引.对于这种需求我们怎么来实现呢?lu ...

  5. A. Ilya and Diplomas( Codeforces Round #311 (Div. 2) )

    A. Ilya and Diplomas time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. Android SQLite 简单使用演示样例

    SQLite简单介绍 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也很的强大. 袖珍型的SQLite能够支持高达2TB大小的数据库, ...

  7. 关于有的Apk无法反编译的探究

    Android的apk包,其实就是zip包,只不过后缀名换了而已!使用“好压”等解压缩工具解压,就可以看到里面的内容了.简单介绍一下吧. 以下就是解压出来的apk的内容: 其中: assets     ...

  8. pandas groupby 分组操作

    最一般化的groupby 方法是apply. tips=pd.read_csv('tips.csv') tips[:5] 新生成一列 tips['tip_pct']=tips['tip']/tips[ ...

  9. Nginx-虚拟主机配置问题

    Nginx-虚拟主机配置问题 标签(空格分隔): linux,php,nginx,larave 这两天突然想配置lnmp环境,学习下Nginx配置结果就遇到了下边的问题 Nginx: server下的 ...

  10. 微信小程序领取卡券

    微信小程序领取卡券 标签(空格分隔): php 开发前需要准备的工作 1 小程序和公众号要有绑定 2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/ ...