画布 1
老男孩教育Docker技术栈
  镜像(images)
    ls: 查看镜像的列表
      -q: 查看镜像的ID
      -a: 查看所有的镜像，列出所有的中间镜像（尤其是在Dockerfile编译生成的中间镜像）
      --no-trunc: 不截断输出信息
    search: 搜索镜像
      --limit : 限制镜像列表的个数，默认是25个
      --no-trunc: 不截断输出
    pull: 拉取镜像
      -a: 拉取镜像的所有tag
      -q: 拉取输出简短模式，仅输出镜像名称和tag
    push: 推送镜像
      -a: 上传镜像的所有tag
      -q: 上传输出简短模式，仅输出镜像名称和tag
    rm: 删除镜像
      -f: 强制移除镜像
    tag: 打标签
    history: 查看镜像的构建历史信息
      --no-trunc: 不截断输出
      -q: 仅显示镜像的ID
    build: 基于Dockerfile构建镜像
      -f: 指定dockerfile文件
      -t: 指定镜像的名称和版本
      --build-arg: 指定构建时的环境变量用于覆盖ARG指令
    load: 加载镜像
      -i: 指定要导入的tar包文件
      <: 指定要导入的tar包
    save: 导出镜像
      -o: 指定要导出的tar包
      >: 指定要重定向的tar包
    import: 导入tar的文件系统
    inspect: 查看镜像的详细信息
      -f: 查看镜像的详细信息
  容器(contianer)
    ls/ps/list: 列出容器列表
      -l: 查看最近的一个容器，包括这个容器的所有状态
      -q: 查看容器的ID
      --no-trunc: 不截断输出
      -a: 查看所有状态的容器
      -s: 查看容器的使用大小
    create/run: 创建一个容器
      -i: 指定标准输入
      -t: 指定为围终端
      -d: 后台启动
      -p: 指定端口映射
      -v: 指定存储卷
      --volume-from: 指定基于某个容器的数据卷挂载
      -w: 指定工作目录
      -e: 指定环境变量
      -h : 指定容器的主机名称
      --network: 指定网络
      --name: 指定的容器的名称
      -P: 随机端口映射
    start: 启动容器
    stop: 停止容器
    restart: 重启容器
    rm: 删除容器
      -f: 强制删除
      -v: 删除容器并一并删除其创建的随机存储卷
    inspect: 查看容器的详细信息
      -f: 指定输出格式
      -s: 查看容器的使用大小
    cp: 在宿主机和容器之间互相拷贝数据
    top: 查看容器的进程信息
    stats: 查看容器的状态
      --no-stream： 不以流的形式显示
      --no-trunc: 不截断输出
    rename: 对容器进行更名
    commit: 手动提交镜像
      -a: 指定作者信息
      -m: 指定镜像的说明，注释
    prune: 删除所有未使用的容器
    pause/unpause: 暂停/恢复容器
    logs: 日志
      --until: 截至某个时间段之前的日志
      --since： 戒指某个时间段之后的日志
      -f: 实时查看日志
      -n: 显示多少行的日志
      -t: 显示时间戳
    attach: 连接容器
      退出容器选项： ctrl+p ---> ctrl +q
    exec: 在容器中执行命令
      -t: 分配伪终端
      -i: 分配标准输入
      -e: 传递环境变量
      -d: 后台运行
      -w: 指定工作目录
      -u: 指定用户
    update: 更新容器的配置
    wait: 等待容器退出的状态码
    diff: 对比容器和镜像的运行差异
    export: 导入容器的文件系统
    kill: 强杀容器
    port: 查看容器的端口映射信息
  自动构建镜像(Dockerfile)
    常用的指令
      FROM： 指定基础镜像
        1.必须指定基础镜像，若不指定，则可以使用保留字"scratch"
        2.镜像别名，多阶段提交
        3.出发ONBUILD指令
      RUN： 在容器中执行指令
      COPY：拷贝文件
        将宿主机的文件拷贝到容器中
        还可以用做多阶段提交时指定别名拷贝，使用--from
      ADD: 解压tar包文件到容器的指定路径中
      CMD: 指定容器的运行COMMAND，其指令可以在容器启动时被覆盖
      ENTRYPOINT：指定容器的运行COMMAND
        1.其指令不可以在容器启动时被覆盖
        2.如果和CMD搭配使用，则CMD将作为参数传递
        3.若启动容器时指定了命令也会被当做参数传递
      LABEL： 为镜像打标签
      WORKDIR： 指定容器的工作目录
      USER： 指定容器的运行用户
      EXPOSE： 指定容器的暴露端口
      VOLUME： 指定随机存储卷
      HEALTHCHECK： 容器做健康检查
      ONBUILD：创建触发器
      MAINTAINER： 指定镜像的作者，目前官方已废弃，不推荐使用！
    多阶段提交
      1.多个FROM指令
      2.COPY指令需要使用"--from"参数来指定从哪个阶段拷贝源文件
    dockerfile的优化思路
      编译速度
        1.更换软件源
        2.充分利用本地缓存镜像，建议将频繁修改的指令往下放
        3.使用".dockerignore"文件忽略不需要的文件
        4.合并多条Dockerfile指令，减少镜像分层，从而减少中间容器的产生
        5.提起下载较大的文件到本地，拷贝到宿主机路径，省略下载的过程
      镜像的体积大小
        1.使用较小的基础镜像
        2.删除无用的缓存数据，卸载无用的软件包
        3.使用多阶段提交的方式，只拷贝程序运行所需的软件包
  端口映射
    底层原理：使用iptable + 端口监听
    常见的写法
      -p [宿主机IP地址]:[宿主机端口]:容器的端口[/协议]
      -P: 生成随机的宿主机端口
  存储卷
    底层原理: 将宿主机的路径挂在到容器中
    使用默认的存储卷管理方式
      自定义数据卷的名称： -v data:/data
      使用随机(匿名)存储卷 -v /data
    自定义存储卷路径
      -v /oldboyedu/data:/data
    和其他容器共享存储卷(--volume-from)
  跨主机互联
    单机网络常用模型
      bridge: 桥接模式，在宿主机上生成一对虚拟网卡
      host: 宿主机网络，和宿主机公用相同的网络空间
      none: 无网络，仅有回环网卡
      container: 寄生在某个已经运行的容器网络空间中
      自定义网络（custom network）
    macvaln
      优点: 不需要单独安装插件，Linux原生支持
      缺点: 默认情况无法访问外网和宿主机网络，还需要手动分配IP地址
    overlay
      优点: 解决了macvlan的缺陷
      缺点: 维护性成本增加，需要使用consul组件
    Flannel
      需要安装etcd
  docker-compose
    作用: 对本地的一组容器进行编排
    常用命令
      up: 启动服务，创建并启动容器
        -d: 放在后台运行
      down: 停止并移除服务
      stop: 停止服务
      start: 启动服务
      restart: 重启服务
      logs: 查看服务日志
      build: 基于dockerfile文件构建镜像
      pull: 批量拉取镜像
      push: 批量推送镜像
      ps: 查看服务的容器状态
      top: 查看服务的进程
      kill: 强杀服务
    常用参数
      -f: 指定docker-compose的文件名称
      -p: 指定项目名称
      -v: 查看docker-compose的版本信息
  远程仓库
    docker registry
      描述： 轻量级私有仓库
      配置不安全的存储库: "insecure-registries"
    harbor
      描述: docker registry基础之上做了二次开发
      功能
        1.基于webUI管理镜像
        2.用户管理
        3.镜像复制
        4.自定义标签
        5.借助于keepalived可以实现高可用harbor
    docker hub
      描述: 官方的镜像仓库
      如何使用
        1.注册一个docker hub的账号
        2.登录到docker hub
          基于base64编码用户密码存储到 ---> /root/.docker/config.json
    第三方仓库
      阿里云
      华为云
      ....
  containerd快速入门
    ctrl管理镜像
    ctrl管理容器
    ctrl管理名称空间
    ctrl管理task任务
    ctrl推送镜像到harbor仓库
    containerd集成dockerd使用指南
  环境搭建
    包环境部署（需要翻墙，可以使用国内的镜像站点代替）
    二进制部署（不需要翻墙，从GitHub下载社区版本的文件即可）