Docker-简介

Docker最初是DotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于DotClound公司多年云服务技术的一次革新,并于2013年3月Apache2.0授权协议开源,主要代码在GitHub上进行维护。Docker项目还加入了Linux基金会,并成立推动开放容器联盟(OCI)

Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互连到进程隔离等等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便、快捷。

为什么要使用Docker

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

  • 更高效的利用系统资源: 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存消耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比于虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用
  • 更快速的启动: 传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、毫秒级的启动时间,大大节约了开发、测试、部署的时间!
  • 一致的运行环境: 开发过程中一个常见的问题就是环境一致性的问题。由于开发环境、测试环境、生产环境不一致,导致有些Bug在开发过程中并未发现。而Docker镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现[这段代码在我机器上没问题啊]这类问题
  • 持续交付和部署: 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过DockerFile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署
  • 更轻松的迁移:由于Docker确保了执行环境一致性,确保了应用的迁移更加容易。Docker可以很多平台上运行,物理机、虚拟机、公有云,私有云甚至笔记本,其运行结果都是一致的。因此用户可以很轻易的将应用从一个平台迁移至另外一个平台,而不用担心执行环境的变化导致应用无法正常运行的情况
  • 更轻松的维护和扩展:Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也是用应用的更新维护更为简单,基于基础镜像进一步扩展镜像也变得非常简单

对比传统虚拟机总结:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般是MB 一般是GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 最多几十个

基本概念

Docker包括三个基本概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

Docker镜像:

对于Linux而言,内核启动后会挂载root文件系统为其提供用户控件支持。对于Docker镜像而言,就相当于是一个root文件系统,比如官方镜像ubuntu:16.04就包含了完整的Ubuntu:16.04最小系统的root文件系统。

Docker镜像分层存储概念:

因为镜像包含完整系统的root文件系统,其体积往往是庞大的。因此在Docker设计时,就充分利用 Union FS的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是一个ISO那样的打包文件,镜像只是一个虚拟概念,镜像并非是由一个文件组成,而是由一组文件系统组成,换言之,是由多层文件系统联合组成的。镜像构建是,会一层层构建,前一次是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,前一层的删除文件操作,并不是真的将其删除了,而是仅在当前层标记其已经删除。在最终运行容器时,虽然我们不会看到该文件,但是该文件会一直跟随该文件。因此在构建镜像时,需格外小心,每一层只添加该层需要添加的东西,任何额外的东西都应该在该层构建结束将其清理掉。分层存储的特性还使得镜像的定制、复用变得更为容易,甚至可以用之前构建好的镜像作为基础层,在此基础上添加新的层,以定制自己所需的内容,构建新的镜像

Docker容器:

镜像和容器的关系,就像是面向对象程序设计中类和实例的关系。镜像是静态的定义,容器时镜像运行时的实体,容易可以创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主指定的进程不同,容器进程运行于属于自己的独立命名空间。因此容器拥有自己的root文件系统、自己的网络配置、自己的进程空间、甚至自己的用户ID空间。容器的进程运行在一个隔离的环境里,使用起来就好像在一个独立与宿主的系统下操作一样。这种特性使得在容器中运行的应用比直接在宿主中运行更加安全。每一个容器运行时,都是以镜像为基础的,在其上为当前容器创建一个存储层,我们称为容器读写准备的存储层为容器存储层。容器存储层的生命周期和容器一样,容器删除时,容器存储层也会随之删除。任何存储于容器存储层的信息,都会随着容器的删除而丢失。按照Docker最佳实践的要求,容器不应对其存储层做任何写入操作,容器存储层要保持无状态化,所有对文件的写入操作,都应该使用数据卷或者绑定宿主目录,在这些位置的写入操作,会直接跳过容器存储层,直接对宿主目录进行读写,其性能和稳定性更高。数据卷的生命周期独立于容器,容器删除,数据卷不会消亡。因此,使用数据卷后,容器删除或重新运行,数据不会丢失。

Docker Registry:

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果我们需要在其他服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的服务,Docker Registry就是这样一个服务。一个Docker Registry可以包含多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像

Docker Registry公开服务:

Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。一般这类公开服务允许用户上传、下载公开的镜像,或提供收费服务共用户管理私有镜像。最常用的Registry公开服务是官方的Docker Hub,也是默认的Registry,并拥有大量的高质量的官方镜像。

私有Docker Registry:

除了使用Docker Registry公开服务之外,我们还可以在本地搭建私有Docker Registry。Docker官方提供了Docker Registry镜像,我们可以直接使用作为私有Registry服务

Ubuntu安装Docker CE

卸载旧版本

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

安装内核可选模块包

sudo apt-get update
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

添加HTTPS传输的软件包以及CA证书

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

添加软件源的RPG秘钥

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

在source.list添加Docker软件源

sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装Docker CE

 sudo apt-get update
 sudo apt-get install docker-ce

镜像加速

对于Ubuntu 16.04+Debian 8+CentOS 7系统,请在/etc/docker/daemon.json文件中加入如下内容(文件不存在请新建该文件):

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

之后重新启动Docker服务:

root@ubuntu:~# systemctl daemon-reload
root@ubuntu:~# systemctl restart docker

Docker服务相关命令

  • 查看Docker状态:
root@ubuntu:~# service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-30 03:21:52 UTC; 4min 30s ago
     Docs: https://docs.docker.com
 Main PID: 4514 (dockerd)
    Tasks: 16
   CGroup: /system.slice/docker.service
           ├─4514 /usr/bin/dockerd -H fd://
           └─4524 docker-containerd --config /var/run/docker/containerd/containerd.toml
  • 启动Docker服务:
root@ubuntu:~# service docker start
  • 停止Docker服务:
root@ubuntu:~# service docker stop
  • 重启Docker服务:
root@ubuntu:~# service docker restart

你可能感兴趣的:(docker)