Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

docker支持的内核 docker三大核心部件_docker支持的内核

Docker 容器通过 Docker 镜像来创建;

镜像与容器的关系类似于面向对象编程中的类与对象的关系。

docker支持的内核 docker三大核心部件_Docker_02

Docker 核心要素

Docker 包括三个核心要素
镜像(Image)、容器(Container)、仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期;
Docker 的运行离不开以上核心几个组件的支持,Docker的成功也是拜这几个组件所赐;
不能错误地理解为Docker就是容器,实际上Docker不是容器,而是管理容器的引擎;(守护进程)

镜像
镜像的基本概念
Docker镜像就是一个只读的模板,可以用来创建Docker容器;
例如:一个镜像可以包含一个完整的 centos 操作系统环境,里面仅安装了 mysql 或用户需要的其它应用程序;
Docker提供了一个非常简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用;
镜像的组成结构
镜像是由许多层的文件系统叠加构成的,最下面是一个引导文件系统bootfs,第二层是一个root文件系统rootfs,root文件系统通常是某种操作系统的运行环境,比如centos、Ubuntu,在root文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成docker中的镜像;

docker支持的内核 docker三大核心部件_redis_03


镜像的日常操作

1、下载镜像,比如下载redis镜像:docker pull redis:latest

reids是查询到的镜像名称,latest是镜像的标签tag

获取一个镜像有两种方式,一种是从官方镜像仓库下载,一种是自己通过Dockerfile文件构建;

如果有官方镜像,我们就不必自己用Dockerfile文件构建了,除非官方没有才会自己去Dockerfile文件构建;

2、列出已经下载的镜像:docker images,或者 docker images redis

3、运行镜像:docker run -d redis 其中-d表示在后台运行

然后通过ps -ef | grep redis可以查到redis进程

4、查看容器镜像的状态:docker ps

通过docker exec -it a8584016f9b6(容器ID) bash 进入redis容器

5、删除镜像:docker rmi redis:latest 注意是rmi,不是rm,rm是删除容器;

容器

容器的基本概念

容器是从镜像创建的运行实例,它可以被启动、停止、删除,每个容器都是相互隔离的、保证安全平台,可以把看做一个简易版的 Linux环境,包括root用户权限、进程空间、用户空间和网络空间和运行在其中的应用程序;

Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层;

docker支持的内核 docker三大核心部件_redis_04


容器的日常操作

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将处于终止状态的容器重新启动;命令:docker start 容器id或容器名称

通过镜像启动容器:docker run -d redis

查看运行中的容器:docker ps

查看所有之前启动过的容器:docker ps -a

停止容器:docker stop 容器id或容器名称

已经停止的容器,我们可以使用命令 docker start 来重新启动;

开启容器:docker start 容器id或容器名称

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器;

删除容器:docker rm 容器id或容器名称

删除容器时,容器必须是停止状态,否则会报错;

进入容器:docker exec -it 容器id或容器名称 bash

还可以使用 docker inspect + 容器id或容器名称 查看容器的更多信息(元信息);

停用全部运行中的容器:docker stop $(docker ps -q)

删除全部容器:docker rm $(docker ps -aq)

一条命令实现停用并删除容器:

docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)

仓库

仓库的基本概念
仓库是集中存放镜像文件的场所,有时候会把仓库和仓库注册服务器(Registry)看做同一事物,并不严格区分,实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag);
仓库分为公开仓库(Public)和私有仓库(Private)两种形式;
最大的公开仓库是 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供用户下载;
当然,用户也可以在本地网络内创建一个私有仓库;
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来即可;
Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务;

仓库的日常操作
用户可通过 docker search 命令来查找官方仓库中的镜像:
docker search rabbitmq
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建;
官方的镜像说明是官方项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容;
根据是否是官方提供,可将镜像资源分为两类;
一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字;
还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀,可以通过前缀 user_name/ 来指定使用某个用户提供的镜像,比如 tianon 用户;
并利用 docker pull 命令来将它下载到本地:
docker pull rabbitmq
docker pull centos