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

    image.png

    1. Docker 容器通过 Docker镜像来创建

      1. 镜像与容器的关系类似于面向对象编程中的类与对象的关系 | Docker | 面向对象 | | —- | —- | | 镜像 | 类 | | 容器 | 对象 |
    2. Docker 核心要素

      1. Docker 包括三个核心要素
        1. 镜像(image),容器(Container),仓库(Repository)
        2. 理解了这三个概念,就理解了Docker的整个生命周期

    Docker 的离不开以上核心几个组件的支持,Docker的成功也是拜这几个组件所赐
    有人会误认为,Docker 就是容器,但Docker 不是容器,而是管理容器的引擎。

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

    image.png

    1. 镜像的日常操作
      1. 下载镜像,比如下载 redis 镜像—— docker pull redis:latest(版本号)
        1. redis 是查询到的镜像名称,latest 是镜像的标签 tag
      2. 获取一个镜像有两种方式,一种是从官方镜像仓库下载,一种是自己通过 dockerfile 文件构建
      3. 如果有官方镜像,我们就不必自己用 dockerfile 文件构建了,除非官方没有才会自己去 dockerfile 文件构建;
      4. 列出已经下载的镜像 docker inages 或者 docker images redis
      5. 运行镜像: docker run -d redis 其中 -d 表示在后台运行
      6. 然后通过 ps -ef | grep redis 可以查到 redis 进程
      7. 查看容器镜像的状态 docker ps
      8. 通过 docker exec -it (镜像id) 进入 redis 容器
      9. 删除镜像: docker rmi redis:latest 注意是 rmi, 不是 rm ,rm 是删除容器
    2. 容器
      1. 容器的基本概念
        1. 容器是从镜像创建的运行实例,它可以被启动,停止,删除,每个容器都是相互隔离的,保证安全平台。可以把容器看做一个 简易版的linux 环境,包括 root 用户权限,进程空间,用户空间和网络空间和运行在其中的应用程序
        2. Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层
    3. 容器的日常操作
      1. 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。
      2. 通过镜像启动容器: docker run -d redis
      3. 查询运行中的容器: docker ps
      4. 查看所有的容器: docker ps -a
      5. 停止容器: docker stop 容器id或者容器名称

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

    1. 开启容器 : docker start 容器 id 或者容器名称

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

    1. 删除容器:docker rm 容器 id 或者容器名称
    2. 删除容器时,容器必须是停止状态,否则会报错;
    3. 进入容器 docker exec -it 容器id或者容器名称 bash 首先要保证容器处理启动状态
    4. 还可以使用 docker inspect + 容器 id 或者容器名称查看容器的更多信息;
    5. 停用全部运行的容器: docker stop $(docker ps -q)
    6. 删除全部容器: docker rm $(docker ps -aq)
    7. 一条命令实现停用并删除容器:

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

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

    可以看到返回了很多包含关键字的镜像,其中包括镜像名字,描述,星级(表示该镜像的受欢迎程度),是否官方创建,是否自动创建;官方的镜像说明是官方项目组创建和维护的,auto资源允许用户验证镜像的来源和内容

    1. 根据是否是官方提供,可将镜像资源分为两类
      1. 一种是类似centos 这样的基础镜像,被称为基础或根镜像,这些基础镜像是由Docker 公司创建,验证,支持,提供,这样的镜像往往使用单个单词作为名字。
    2. 还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀,可以通过前缀 user_name/ 来指定使用某个用户提供的镜像,比如 tianon 用户;
      1. 利用docker pull 命令来将它下载到本地