命令补充

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和容器间会实时同步

docker进阶1-命令补充和容器卷使用的更多相关文章

  1. Docker进阶:容器卷、DockerFile、Docker网络原理

    1.Docker镜像 1.1镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件. 包含一个软件的所有内容.蒋所有的应用和环境,直接打包为docker镜像,直 ...

  2. 『现学现忘』Docker常用命令 — 20、容器常用命令(二)

    提示:接上一篇 目录 9.后台启动容器 10.查看容器日志 11.查看容器内运行的进程 12.查看容器内部细节 9.后台启动容器 后台启动容器也叫启动守护式容器. 命令:docker run -d 镜 ...

  3. Docker操作笔记(二)容器

    容器 一.启动容器 启动一个容器有两种方式: 1.基于镜像新键并启动一个容器: 所需要的主要命令为docker run docker run ubuntu:18.04 /bin/echo " ...

  4. 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云

    一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...

  5. Docker(七):Docker容器卷管理

    1.使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失.为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器 ...

  6. docker进阶篇(一) ---- Volume(数据卷)

    引言 docker的镜像是由多个只读的文件系统叠加在一起形成的.当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层.这时如果修改正在运行的容器中已有的 ...

  7. Docker学习笔记之docker volume 容器卷的那些事(二)

    预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...

  8. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  9. 创建基于 AFS 的 Docker 容器卷

    标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...

随机推荐

  1. 【数据结构】B树、B+树详解

    B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树),理解不透彻B树,则 ...

  2. 理解SVG中的 viewport,viewBox, preserveAspectRatio

    _ 阅读目录 一:理解viewport 二:理解viewBox 三:理解 preserveAspectRatio 回到顶部 一:理解viewport 该属性表示的是SVG可见区域的大小.或者也可以叫画 ...

  3. 10分钟了解一致性hash算法

    应用场景 当我们的数据表超过500万条或更多时,我们就会考虑到采用分库分表:当我们的系统使用了一台缓存服务器还是不能满足的时候,我们会使用多台缓存服务器,那我们如何去访问背后的库表或缓存服务器呢,我们 ...

  4. lvs模式及算法

    一.三种模式 (一).Virtual Servervia Network Address Translation(VS/NAT) 通过网路地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将 ...

  5. 8、JAVA中的用户输入(I/0交互过程)

    这里在数组的学习中用到了用户输入,也就是交互模式,日常的数据,不可能每一次都是程序员定义好的,终究需要用户与程序之间进行交互,机器等待用户输入,用户通过键盘输入所需数据(数据包括,字符,字串,数值等) ...

  6. 定时器任务django-crontab的使用【静态化高频率页面,增加用户体验】【系统的定时器,独立于项目执行】【刘新宇】

    页面静态化 思考: 网页的首页访问频繁,而且查询数据量大,其中还有大量的循环处理. 问题: 用户访问首页会耗费服务器大量的资源,并且响应数据的效率会大大降低. 解决: 页面静态化 1. 页面静态化介绍 ...

  7. Scala集合(四)

    1. 集合 集合主要有三种: Sequence Map Set sequence是一种线性元素的集合,可能会是索引或者线性的(链表).map是包含键值对的集合,就像Java的Map,set是包含无重复 ...

  8. java学习-NIO(五)NIO学习总结以及NIO新特性介绍

    我们知道是NIO是在2002年引入到J2SE 1.4里的,很多Java开发者比如我还是不知道怎么充分利用NIO,更少的人知道在Java SE 7里引入了更新的输入/输出 API(NIO.2).但是对于 ...

  9. 解读 PHP 的 P++提案

    解读 PHP 的 P++提案 周末看到一篇文章说 PHP 创始人提议将 PHP 拉出新分支,创建 P++ 语言.随后阅读了一下 Zeev Suraski 发起的这个邮件列表,大致了解了一下,这里做个解 ...

  10. CMake入门-02-HelloWorld扩展

    工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-同一目录,多个源文件 (1) 新建 hello 目录,创建 ...