docker学习[1]:什么是docker?

什么是docker

Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

Docker的作用如同在windows环境下的VMware,是一种环境的虚拟化方式,但是docker和其他传统的虚拟机(主要对比VMware,另外docker是一种应用容器,并不是虚拟机)相比有很多优势。

  1. docker能更高效的利用系统资源
  2. docker有更快的启动时间
  3. 和虚拟机一样,docker能实现一致的运行环境
  4. 由于有dockerfile的存在,开发人员通过dockerfile进行镜像构建更简单快速。

受益于docker的分层技术和镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单

docker目前的主要用途有以下3点

  1. 提供一次性环境,如测试时快速构建线上环境。
  2. 提供弹性云服务,因为docker拥有更快的启动时间,docker容器可以随时开关,很适合动态扩容缩容。
  3. 组件微服务架构,因为docker可以更高效的利用系统资源,因此在本机上就能轻松模拟出微服务架构。

安装docker(centos)

注意:Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为 stable, test, 和 nightly 三个更新频道。每六个月发布一个 stable 版本。

# 更新yum
yum update
 
# 安装所需软件包
yum install -y yum-utils  device-mapper-persistent-data lvm2
 
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
#  查看docker版本(如果需要)
yum list docker-ce --showduplicates|sort -r 
 
#  安装docker(如docker-ce-18.03.1.ce)
yum  install  docker-ce-18.03.1.ce -y
 
#  启动docker
systemctl start docker
 
#  加入开机启动
systemctl enable docker
 
#  配置镜像
vi /etc/docker/daemon.json 
 
{
    "registry-mirrors":  ["http://hub-mirror.c.163.com"]  #这是网易镜像,还有其他国内镜像如阿里云等 
}

docker的三个概念

docker包括3个基本概念,即镜像(Image),容器(Container),仓库(Repository)

镜像:

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

镜像的构建是分层的,不同于ios那样的打包系统,docker的镜像只是一个虚拟的概念,时间上它并不是由一个文件组成的而是由一组文件组成的。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。

在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉


容器:

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

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。


仓库:

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

程序幼儿员-龚学鹏
请先登录后发表评论
  • latest comments
  • 总共0条评论