对于学习Docker而言,很关键的一点,一定要了解Docker的核心概念及其原理,若不了解清除,在后续的可持续集成,自动化生产部署方案会出现问题
Docker原理:
Docker使用客户端-服务器(C/S)架构模式。Docker客户端会与Docker守护进程进行通信。Docker守护进程会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。Docker客户端和守护进程可以运行在同一个系统上,当然你也可以使用Docker客户端去连接一个远程的Docker守护进程。Docker客户端和守护进程之间通过socket或者
RESTful API进行通信
Docker核心概念:
1、镜像(image)
类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统
2、容器(Container)
镜像核心概念:
按照Docker官网的技术文档描述,Image(镜像)是Docker术语的一种,代表一个只读的layer。而layer则具体代表Docker Container文件系统中可叠加的一部分
例如:假设用户已经通过Docker Registry下拉了Ubuntu:14.04的镜像,并通过命令docker run –it ubuntu:14.04 /bin/bash将其启动运行。则Docker Daemon为其创建的rootfs以及容器可读写的文件系统可参见图
一般情况下,通过某种文件系统挂载内容至挂载点的话,挂载点目录中原先的内容将会被隐藏。而Unionmount则不会将挂载点目录中的内容隐藏,反而是将挂载点目录中的内容和被挂载的内容合并,并为合并后的内容提供一个统一独立的文件系统视角
继续以ubuntu14.04为例,虽然通过AUFS可以实现rootfs与read-writefilesystem的合并,但是考虑到rootfs自身接近200MB的磁盘大小,如果以这个rootfs的粒度来实现容器的创建与迁移等,是否会稍显笨重,同时也会大大降低镜像的灵活性。而且,若用户希望拥有一个ubuntu14.10的rootfs,那么是否有必要创建一个全新的rootfs,毕竟ubuntu14.10和ubuntu14.04的rootfs中有很多一致的内容。
DockerImage中又抽象出两种概念:ParentImage以及BaseImage。
通过image的形式,原先较为臃肿的rootfs被逐渐打散成轻便的多层。Image除了轻便的特性,同时还有上文提到的只读特性,如此一来,在不同的容器、不同的rootfs中image完全可以用来复用。
Docker images -tree
docker run -ti docker.io/centos:latest /bin/bash
docker pull centos
实际执行的命令为我们也可以创建自己私有的仓库,运行官方提供的 registry 镜像,将端口映射到主机的 5000 端口上,其它均使用默认配置
guohl@ghl-MBP ⮀ ~ ⮀ docker run -d -p 5000:5000 registry
Unable to find image 'registry:latest' locally
6cfde7386ab2: Pull complete
9789d95d9fda: Pull complete
19443e64f223: Pull complete
b329371ab73c: Pull complete
f0daee9a4e8f: Pull complete
a66e50e56475: Pull complete
8ab3d2988df5: Pull complete
5f60fa7ea945: Pull complete
db22a140c899: Pull complete
5b2fff9306bd: Pull complete
511136ea3c5a: Already exists
f3c84ac3a053: Already exists
a1a958a24818: Already exists
9fec74352904: Already exists
d0955f21bf24: Already exists
registry:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Status: Downloaded newer image for registry:latest
8fb8e82e61822e593e10b59a4e7bbad18c789b34e3b38942d5b63dccb497ed09
创建好私有仓库之后,我们就可以向该仓库上传镜像,别人也可以从该仓库下载镜像