• 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和容器间会实时同步
      
  • 相关阅读:
    random、shutil、shevle、标准输入输出错误流
    Python中Json 和 pickle 详解
    Python 中的sys、os、os.path模块总结
    Python 中time,calendar,datatime模块总结
    包的概念和导入包的方法
    Python 中模块及其导入方式
    迭代器和生成器
    python 函数参数
    JAVA 配置Path环境变量
    腾讯云服务器简单配置web项目
  • 原文地址:https://www.cnblogs.com/noodlerkun/p/11461888.html
Copyright © 2020-2023  润新知