【阅读笔记】[初级篇]跟我一起学习Docker

一. 认识Docker

  1. Docker的目标:
    通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用级别的一次封装,到处运行。
  2. Docker虚拟化的优点

    • 环境隔离
      通过cgroups和namesapce进行实现资源隔离,实现一台机器运行多个容器互不影响。

    • 更快速的交付部署
      开发,测试和运维人员可以直接通过使用相同的环境来部署代码。

    • 更高效的资源利用
      docker容器的运行不需要额外的虚拟化管理程序的支持
      内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低

    • 更易迁移扩展
      docker容器几乎可以在任意的平台上运行,包括乌力吉、虚拟机、公有云、私有云、个人电脑、服务器等

    • 更简单的更新管理
      使用Dockerfile,只需要小小的配置修改,就可以替代以往的大量的更新工作。
      并且所有修改都是以增量的方式进行分发和更新,从而实现自动化和高效的容器管理

  3. 虚拟化与Docker对比

    • 虚拟化定义:
      虚拟化是一种资源管理技术,它是将计算机的各种实体资源予以抽象、转换后呈现出来,打破实体结构间不可切割的障碍,使用户得以更好的方式来应用这些资源。
      这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。
      一般所指的虚拟化资源包括计算能力和数据存储

    • 全虚拟化(Hypervisor Virtualization).
      在 HostOS 中通过 Hypervisor 层实现安装多个 GuestOS.
      每个 GuestOS 都有自己的内核, GuestOS 之间完全隔离。

    • 容器虚拟化(Operation System Virtualization)
      使用 Linux 内核中的 namespaces 和 cgroups 实现进程组之间的隔离。
      是用内核技术实现的隔离,所以它是一个共享内核的虚拟化技术。
      容器虚拟化只是为运行 App 提供的一个依赖的环境,它提供的镜像是一个删减版本的系统镜像.

二. 核心概念

  1. 镜像
    镜像就是一个只读的模板,可以用来创建 Docker 容器

    • 创建Docker镜像本身多数是在一个现有镜像基础上创建新镜像
  2. 容器
    容器是从镜像创建的运行应用的一个实例.

    • 它可以被 启动, 开始, 停止, 删除.
    • 每个容器都是相互隔离的,保证安全的平台.
    • 可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
  3. 仓库
    仓库时集中存放镜像文件的场所.
    有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
    实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签.

三. 镜像的基本操作

  1. 获取镜像

    命令: docker pull [<Domain>://]image-name
    说明:

    1. 镜像时Docker运行容器的前提
    2. 用户可以使用上面的 docker pull 从仓库里面下载镜像.
    3. 对镜像而言,如果不显式地指定tag, 则默认会选择 latest 标签, 即是下载仓库中最新版本的镜像.
    4. 默认是从 docker 官方下载镜像.也只有docker官方的镜像可以不加命名空间前缀直接进行下载.
  2. 查看镜像列表

    命令: docker images
    说明:

    1. 列出本地主机上已有的镜像
    2. 信息含义:来自于哪个仓库、镜像的标签信息、镜像的ID号(唯一)、创建时间、镜像大小.
  3. 查看镜像信息

    命令: docker inspect <IMAGE_ID>
    说明:

    1. 返回的是一个JSON的格式消息
    2. 只查看其中一项内容时,可以使用 -f 参数指定,具体格式如下:
      docker inspect -f {{.Config}} <IMAGE_ID>
  4. 查找镜像

    命令: docker search <IMAGE_NAME_[TAG]>
    说明:

    1. 搜索远端仓库中共享的镜像,
    2. 默认搜索Docker hub官方仓库中的镜像.
  5. 删除镜像

    命令: docker rmi <IMAGE_ID | IMAGE_NAME_[TAG]>
    说明:

    1. 当同一个镜像拥有多个标签,docker rmi只是删除该镜像多个标签中的指定标签而已,而不影响镜像文件
    2. 如果一个镜像就有一个tag的话,删除tag就删除了镜像的本身.
    3. 当有该镜像创建的容器存在时,镜像文件默认是无法被删除的.
  6. 创建镜像

    命令: docker commit [OPTIONS]
    参数:
    -a, --author 作者信息
    -m, --message 提交信息
    -p, --pause=true 提交时暂停容器运行
    说明:

    1. 镜像是从某一个容器来创建的
  7. 迁出镜像

    命令: docker save [OPTIONS] <IMAGE|IMAGE_ID>
    参数:
    -o, --output string Write to a file, instead of STDOUT

  8. 载入镜像

    命令: docker load [OPTIONS] <IMAGE|IMAGE_ID>
    参数:
    -i, --input string Write to a file, instead of STDIN

  9. 上传镜像

    命令: docker push [OPTIONS] NAME[:TAG]
    参数:
    --disable-content-trust Skip image signing (default true)

四. 容器的基本操作

  1. 创建容器

    • 创建停止状态的容器
      docker create -ti ubuntu

    • 创建并启动容器

      • docker run ubuntu/bin/echo "Hello World"

      • docker run 背后的故事:
        STEP-1) 检查本地是否存在制定的镜像,不存在就从公有仓库下载。
        STEP-2) 利用本地镜像创建并启动一个容器。
        STEP-3) 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
        STEP-4) 从宿主机配置的网桥接口桥接一个虚拟接口到容器中去。
        STEP-5) 从地址池配置一个IP地址给容器。
        STEP-6) 执行用户的指定的用户程序。
        STEP-7) 执行完毕后容器被终止。

      • 一条简单命令 docker run -it ubuntu /bin/bash

        -t : 让docker分配一个伪终端并绑定到容器的标准输入上。
        -i : 让容器的标准输入保持打开。
        在交互模式下,用户可以通过所创建的终端来输入命令,exit命令退出容器。
        退出后,容器自动处于终止状态。

      • 守护台模式运行

        -d : 让Docker容器运行在后台以守护态(daemonized)形式运行
        docker run -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done"

  2. 终止容器

    • docker ps [-a]
    • docker start/stop <CONTAINER_ID>
  3. 进入容器

    docker exec -it <CONTAINER_ID> bash
    守护台运行时,exec进入容器后,exit 容器不退出, 仍会在后台执行

  4. 删除容器

    docker rm <CONTAINER_ID>
    删除正在运行的容器,需要停止容器在进行删除
    使用docker rm –f 命令进行强制删除

  5. 导入和导出容器

    docker export/import

五. 数据管理

  1. 数据卷
    数据卷是一个可供容器使用的特殊目录,其特性如下:

    • 数据卷可以在容器之间共享和重用
    • 数据卷修改会立即生效
    • 数据卷的更新不会影响镜像
    • 如果有容器使用数据卷,该卷会一直存在
  2. 在容器内创建数据卷

    docker run -dti -v ${PWD}/webapp:/root/webapp:ro ubuntu bash
    说明:

    1. -v 标记可以在容器内创建一个数据卷
  3. 数据卷容器
    数据卷容器用于用户需要在容器间共享一些持续更新的数据,数据卷容器专门提供数据卷供其它容器挂载使用

    创建数据卷容器 db1
    docker run -dti --name db1 -v /dbdata ubuntu bash

    创建容器db2与db1共享dbdata的数据
    docker run -dti --name db2 --volumes-from db1 ubuntu bash

  4. 数据卷容器操作需要看详细文档
    数据卷容器的删除/备份/恢复

猜你喜欢

转载自blog.csdn.net/liudglink/article/details/81160290