画布 1
docker
  docker
    Management Commands
      builder Manage builds
        管理构建
      config Manage Docker configs
        管理 docker 配置
      container Manage containers
        管理容器
      context Manage contexts
        管理上下文
          当构建的时候，用户会指定构建镜像上下文的路径，docker build 命令得知这个路径后，会将路径下的所有内容打包，然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后，展开就会获得构建镜像所需的一切文件。
      image Manage images
        管理镜像
      network Manage networks
        管理网络
      node Manage Swarm nodes
        管理 swarm 结点
      plugin Manage plugins
        管理插件
      secret Manage Docker secrets
        管理 docker 秘密数据——不只是密钥，而是一切加密算法需要使用的数据，包括证书、公私钥、密码
      service Manage services
        管理服务
          create Create a new service
          inspect Display detailed information on one or more services
          logs Fetch the logs of a service or task
          ls List services
          ps List the tasks of one or more services
          rm Remove one or more services
          rollback Revert changes to a service's configuration
          scale Scale one or multiple replicated services
          update Update a service
      stack Manage Docker stacks
        管理 docker stack
      swarm Manage Swarm
        管理 swarm
      trust Manage trust on Docker images
        low-level information about keys and signatures
专指镜像的 keys 和 signature
      volume Manage volumes
        管理 docker 卷
      system Manage Docker
        管理 docker 系统参数和配置
          可以 inspect 整个 docker engine 的基本参数
          可以接收 docker server 的 events
    Commands
      info Display system-wide information
        打印系统基本信息
      attach Attach local standard input, output, and error streams to a running container
        把本地的输入输出和错误流挂载到容器上。
不推荐在生产上使用，因为 attach 会阻塞所有 attach 窗口，所有窗口共用输入输出流
也不要 ssh 过去。
      exec Run a command in a running container
        对运行中的容器执行一个命令，可以用来进入一个容器中
        只用 -i 参数时，由于没有分配伪终端，界面没有我们熟悉的 Linux 命令提示符，但命令执行结果仍然可以返回。
当 -i -t 参数一起使用时，则可以看到我们熟悉的 Linux 命令提示符。
-i 开启了一个不可见的 stdin 。理论上我们可以和容器交互，但我们不是在伪终端上交互的。
it 意味着 和 d 相反的使用方式，前者必须是交互式沉浸式地使用，后者就是detached形式的
        docker exec -it webserver bash
          最常用、最重要的命令！
          这要求容器是是以-d 开始 run 的，或者由 start 再启动的。
      build Build an image from a Dockerfile
        从 dockerfile 构造镜像
      save Save one or more images to a tar archive (streamed to STDOUT by default)
        保存镜像（而不是容器）（用 stdout）到文档
      commit Create a new image from a container's changes
        从一个容器的变更里（产生）提交一个镜像
        只适合平时保留现场用-不要用来制作日常容器，这样造出来的容器是黑盒容器。制作日常容器要用 dockerfile。
      export Export a container's filesystem as a tar archive
        导出容器的文件系统为 tar 文档
      import Import the contents from a tarball to create a filesystem image
        导入压缩文件的内容，创建一个文件系统镜像
      cp Copy files/folders between a container and the local filesystem
        在本地文件系统和 docker 文件系统之间进行文件、文件夹拷贝
      create Create a new container
        创建一个新容器，而不是镜像
      diff Inspect changes to files or directories on a container's filesystem
        查看容器文件系统的变更。在评估镜像真正的变更的时候特别重要。
      history Show the history of an image
        显示镜像的历史
      events Get real time events from the server
        获取 docker server 而不是容器的实时事件
      images List images
        列出全部镜像
      inspect Return low-level information on Docker objects
        查看容器对象的低级信息
      kill Kill one or more running containers
        杀死一个容器，是 stoping 之后的后续操作
      load Load an image from a tar archive or STDIN
        从文档或者 stdin 加载镜像
      login Log in to a Docker registry
        登录 docker 仓库（可以搭建上私服，也可以搭建上公服）
      logout Log out from a Docker registry
        登出
      logs Fetch the logs of a container
        获取容器的 log
      pause Pause all processes within one or more containers
        使用 groups freezer 让进城不知不觉被暂停。
旧方式是使用 sigstop 信号，让进程用观察和响应的机制来暂停自己。
        docker pause 容器名
      port List port mappings or a specific mapping for the container
        列出容器的端口映射
      ps List containers
        列出所有容器
      pull Pull an image or a repository from a registry
        从仓库里拉取镜像
      push Push an image or a repository to a registry
        推送镜像到仓库
      rename Rename a container
        重命名容器
      restart Restart one or more containers
        重启容器，不是所有的容器都可要被重启的
      rm Remove one or more containers
        删除容器
      rmi Remove one or more images
        删除镜像
        可以帮把镜像 untagged 掉
      run Run a command in a new container
        最重要的命令，在一个新容器里运行命令
          docker run -d -p 80:4000 docs/docker.github.io
          --rm 使用完以后删除掉
          指定 name
          指定 port
          指定 volume
          指定 network（一次只能指定一个）
          指定 bridge
          -e 指定环境变量
            eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiZTFiMmEwN2I1MGQxODQ0Mzg0MzExZjVkMTJiYmU5OWJhMzZiM2JjYmYyNmU3ZjM1MjM4MzdhM2E1NDBmMGNkNCIsImtleSI6ImdZSDd0b0FCazVuNlRPMEZrQXJuOnB5V1dNckFPVEFtOXhuUzNTaDZ0cncifQ==
          在运行时可以指定新的命令来替代镜像设置中的这个默认命令，比如，ubuntu 镜像默认的 CMD 是 /bin/bash，如果我们直接 docker run -it ubuntu 的话，会直接进入 bash。我们也可以在运行时指定运行别的命令，如 docker run -it ubuntu cat /etc/os-release。这就是用 cat /etc/os-release 命令替换了默认的 /bin/bash 命令了，输出了系统版本信息。
      search Search the Docker Hub for images
        在 docker hub 里搜索镜像
      start Start one or more stopped containers
        启动一个停止的容器
          -a 可以通过标准输出查看一个总是启动不了的容器的失败原因
      stats Display a live stream of container(s) resource usage statistics
        实时直播一个容器的资源使用统计
      stop Stop one or more running containers
        停止一个或更多容器
      tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
        给容器打标，类似制造软链接
      top Display the running processes of a container
        不进入容器而列出容器内所有的运行的进程
      unpause Unpause all processes within one or more containers
        解除一个或多个容器的暂停进程
      update Update configuration of one or more containers
        更新一个或多个容器的配置
          The docker update command dynamically updates container configuration.
          docker update --cpu-shares 512 abebf7571666
      version Show the Docker version information
        展现 dockerversion
      rm
        等待一个或多个容器暂停，并打印他们的 exit codes
    options
      -i
        So, with that as background, run a container with no options and by default you have a stdout stream (so docker run | <cmd> works); run with -i, and you get stdin stream added (so <cmd> | docker run -i works);
          使用这个选一个项以后，这个进程得到了一个标准输入流，用于接收输入
        docker run/exec -i will connect the STDIN of the command inside the container to the STDIN of the docker run/exec itself.
      -t
        pseudo tty 打开一个伪电传打字机（实际上就是电子伪终端）
use -t, usually in the combination -it and you have a terminal driver added, which if you are interacting with the process is likely what you want. It basically makes the container start look like a terminal connection session.
          使用这个选项后，这个进程得到了一个 tty，用于 attach
          docker compose 的配置文件里很需要这个选项
      -d
        以守护进程方式运行，这样外部的父进程接收 ctrl+c 中断以后，docker 的流程不会收到同样的信号。d for detached
      -f
        f for follow
      再加上 bash，得到了一个容器的通道
  docker-compose
    命令
      选项
        -f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
          指定另一个 compose 文件，缺省为 docker-compose.yml
        -p, --project-name NAME Specify an alternate project name
(default: directory name)
          指定另一个项目名称，缺省为目录名。目录名是容器名的组成部分，如 myapp_db_1。
        --verbose Show more output
          打印冗长信息
        --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
          指定日志级别
        --no-ansi Do not print ANSI control characters
          不打印 ansi 字符
        -v, --version Print version and exit
          打印版本并退出
        -H, --host HOST Daemon socket to connect to
          确定要去连接的 docker 守护进程
        --tls Use TLS; implied by --tlsverify
          使用 tls
            现在对 docker 体系而言，tls 是主流
        --tlscacert CA_PATH Trust certs signed only by this CA
          被这个 ca 签署的 tls 的 cacert
        --tlscert CLIENT_CERT_PATH Path to TLS certificate file
          tls 的 cert
        --tlskey TLS_KEY_PATH Path to TLS key file
          tls 的 key 文件
        --tlsverify Use TLS and verify the remote
          使用远程 tls 验证
        --skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
          不校验 docker 守护进程的 hostname 和当前的 client 证书中的 hostname
        --project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
          项目目录，缺省情况下配置文件和项目目录是分离的
        --compatibility If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent
          兼容性。如果设置了，compose 会尝试把配置文件中的 keys 转变成 非-swarm 的等价物。
      子命令
        build Build or rebuild services
          构建和重构建服务
        bundle Generate a Docker bundle from the Compose file
          构造 docker bundle
            制造 dab，为 swarm，docker stack 准备的实验性 feature，见：https://docs.docker.com/compose/bundles/
        config Validate and view the Compose file
          验证和查看 compose 文件
        create Create services
          创建服务
        down Stop and remove containers, networks, images, and volumes
          停止和删除容器、网络、镜像和卷
        events Receive real time events from containers
          从容器里接收实时事件
        exec Execute a command in a running container
          在运行中的容器里执行命令
        help Get help on a command
          获取一个命令的帮助
        images List images
          列出镜像列表
        kill Kill containers
          杀死容器
        logs View output from containers
          查看容器的输出
        pause Pause services
          暂停服务
        port Print the public port for a port binding
          绑定端口绑定的公共端口
        ps List containers
          列出容器
        pull Pull service images
          拉取服务镜像
        push Push service images
          推服务镜像
        restart Restart services
          重启服务
        rm Remove stopped containers
          删除已经【停止】的容器
        run Run a one-off command
          跑一个一次性命令
        scale Set number of containers for a service
          伸缩服务，设置一个服务的容器数量
        start Start services
          启动服务
        stop Stop services
          停止服务
        top Display the running processes
          展示运行的进程
        unpause Unpause services
          取消服务暂停
        up Create and start containers
          创造和启动容器
        version Show the Docker-Compose version information
          显示 docker-compose 版本信息
    结构
      project
        service
          container
      stack
    生命周期
      create
        start
          pause
            unpause
          stopped
            killed
              remove
    配置文件
      expose 暴露容器给link到当前容器的容器
      ports 暴露容器端口到主机的任意端口或指定端口
  基本要素
    镜像
    容器
    网络
    卷
    config
    context
    command --options subcommand --suboptions
  来源
    标准文件
    archive
    stdin