docker2-命令补充与容器数据卷使用

命令补充

docker信息与帮助

  • docker version 和 docker info
  • docker --help 查看所有docker命令列表
  • docker --help run/commit/... 查看指定docker命令用法

镜像命令

  • 本机镜像列表 docker images
    -a 列出本机所有镜像(包括中间层)
    -q 只显示镜像ID
    --digests 显示镜像的摘要信息
    --no-trunc 显示完整镜像ID
  • 镜像查询获取 docker search 镜像[:tag]; docker pull 镜像[:tag]
  • 镜像删除
    • 单个删除 docker rmi 镜像id/name(-f强制删除)
    • 删除多个 docker rmi -f img1:tag img2:tag ...
    • 删除所有 docker rmi -f $(docker images -qa)
  • 镜像提交(commit)与推送(push)云端-类比GitHub
  • 镜像保存(save)与加载(load)
    想要移植某个提交的状态镜像,但是推送云端太麻烦。
    可以将一个或多个镜像保存为文件,然后载入这个文件达到目的。

    实验开始:将centos和hello-world镜像移植
    1)拉取centos和hello-world镜像
    docker pull centos
    docker pull hello-world
    2)镜像保存为文件
    docker save centos hello-world -o /usr/local/mydocker/myimages.package
    3)删除原来的镜像
    docker rmi centos hello-world
    4)载入镜像
    docker load -i /usr/local/mydocker/myimages.package

容器命令

  • 新建并启动容器 docker run [options] 镜像id/name
    --name 为该容器指定一个名字
    -d 后台运行容器,返回容器ID,用于启动守护式容器(tomcat容器)
    -i 以交互模式运行容器,通常与 -t 一起用(centos容器)
    -t 给容器新分配一个输入终端(bash)
    -P 随机端口映射
    -p 指定端口映射
  • 运行容器列表查看 docker ps
    -a 历史容器(包括停止的,启动失败的)
    -l 查看最近容器
    -n 查看最近n次的容器
    -q 只显示容器ID
  • 容器停止和启动 docker stop/start/restart 容器id/name
    强制停止容器(Exited) docker kill 容器id/name
  • 删除已停止(Exited)的容器 docker rm 容器id/name
    此时docker ps -a 看不到容器记录了
    docker rm -f 容器id/name强删,如果有运行的,会先进行stop
  • 退出容器交互(已进入容器/集装箱内)
    • exit 退出并停止容器(Exited)
    • Ctrl-P+Q 回到宿主机环境,不停止容器
  • 查看容器内运行进程 docker top 容器id/name

    docker --help|grep top == Display the running processes of a container

  • 查看容器日志 docker logs 容器id/name
    -f 跟随最新日志
    -t 打印时间戳
    --tail n 显示最后n条
    实验开始:  
    1 运行centos镜像容器,持续打印日志  
    `docker run --name mycentos -d centos /bin/sh -c "while true; do echo hello mycentos; sleep 2; done"`  
    2 查看容器日志 `docker logs mycentos -ft --tail 5`  
    3 查看容器内运行进程 `docker top mycentos`
    
  • 查看容器内部细节 docker inspect mycentos
    打印JSON对象文本,描述了该容器的细节信息,比如容器id,创建时间,运行路径,运行参数,状态等等。
  • 继续与运行的容器进行交互
    • docker attach mycentos
      回到该容器内部Linux
    • docker exec -t mycentos ls -lrt
      对目标容器施加命令,获取输出,隔山打牛
      docker exec -it mycentos /bin/bash效果和attach一样
  • 容器内文件拷贝至宿主机 docker cp mycentos:/test.txt /
    注:停止/退出(stop-Exited)的容器,运行期文件不会消失(系统开关机),但docker rm后,文件消失(重装了系统一样..)。
    真正使用时,应该使用容器数据卷来达到容器运行数据持久化的目的。
  • 运行容器状态镜像提交 docker commit -a "作者" -m "描述" 容器id/name 新镜像版本名[:tag]
    实验开始:
    1)运行官方centos镜像,容器内新建文件111.txt
        docker run --name mycentos -it centos /bin/bash
        touch /usr/local/111.txt
    2)临时退出容器,进行容器镜像提交 
        docker commit -a "Richard" -m "add 111.txt" mycentos  hwc/centos
        //执行成功会返回新的镜像ID
    3)查看本地镜像,运行新的镜像,进入看是否有新增的/usr/local/111.txt
    

容器数据卷(volume)

容器卷概述

  • 卷即目录或文件,容器卷的设计目的就是为了容器数据的持久化。
  • 当容器被删除后,容器内运行时产生的数据也消失了,我们希望对齐持久化,类比Redis中的数据持久化的rdb和aof文件。
  • 我们还希望容器和宿主文件共享,容器之间文件共享。
  • 容器卷存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此可以绕开UnionFS提供一些用于数据持久化和共享的特性。
  • 容器卷独立于容器的生存周期,Docker容器退出会删除时不会删除其挂载的容器卷。
  • 容器卷特点
    • 容器卷可在容器之间共享和重用数据
    • 卷中的更改直接生效,但不会影响到提交的镜像中(即数据卷容器提交的镜像,运行时不会挂载原容器卷,从docker inspect的信息中可以看出这点)

开始使用

  • 容器运行添加容器卷
    docker run -v /宿主机文件目录:/容器内文件目录[:ro] 镜像id/name
    可以追加:ro设置容器卷为容器只读。追加多个-v则可挂载多个容器卷。
    另一种挂载容器卷的方式是编写/改写DockerFile描述构建镜像运行。
    实验开始:
    1)运行centos容器,-v 挂载一个容器卷
    docker run --name mycentos -it -v  /usr/local/dcVolume/mycentos:/usr/local/dcVolume centos;
    2)docker inspect mycentos 可以看到挂载信息
    "Binds": [
        "/usr/local/dcVolume/mycentos:/usr/local/dcVolume"
    ]
    3)容器内外创建修改文件验证共享性
    
  • 数据卷容器(--volumes-from 容器间传递共享)
    • 即挂载了容器卷的容器,其他容器运行时可以继承这个父容器实现容器间数据的共享。
    • 实验开始
    1)先运行一个数据卷容器
    docker run --name mycentos00 -it -v /usr/local/dcVolume/mycentos:/usr/local/dcVolume centos;
    2)运行两个新的相同镜像容器,继承容器卷运行
    docker run --name mycentos01 -it --volumes-from mycentos00 centos;
    docker run --name mycentos02 -it --volumes-from mycentos00 centos;
    3)可以看到这三个容器内都有 /usr/local/dcVolume 目录
    4)宿主机fs新建一个host.txt文件,三个容器中都会出现
    5)容器间修改目录文件,宿主机fs和容器间会实时同步
    
原文地址:https://www.cnblogs.com/noodlerkun/p/11461888.html