docker进阶1-命令补充和容器卷使用
命令补充
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 attach mycentos
- 容器内文件拷贝至宿主机
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-命令补充和容器卷使用的更多相关文章
- Docker进阶:容器卷、DockerFile、Docker网络原理
1.Docker镜像 1.1镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件. 包含一个软件的所有内容.蒋所有的应用和环境,直接打包为docker镜像,直 ...
- 『现学现忘』Docker常用命令 — 20、容器常用命令(二)
提示:接上一篇 目录 9.后台启动容器 10.查看容器日志 11.查看容器内运行的进程 12.查看容器内部细节 9.后台启动容器 后台启动容器也叫启动守护式容器. 命令:docker run -d 镜 ...
- Docker操作笔记(二)容器
容器 一.启动容器 启动一个容器有两种方式: 1.基于镜像新键并启动一个容器: 所需要的主要命令为docker run docker run ubuntu:18.04 /bin/echo " ...
- 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云
一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...
- Docker(七):Docker容器卷管理
1.使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失.为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器 ...
- docker进阶篇(一) ---- Volume(数据卷)
引言 docker的镜像是由多个只读的文件系统叠加在一起形成的.当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层.这时如果修改正在运行的容器中已有的 ...
- Docker学习笔记之docker volume 容器卷的那些事(二)
预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...
- Docker学习笔记之docker volume 容器卷的那些事(一)
预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...
- 创建基于 AFS 的 Docker 容器卷
标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...
随机推荐
- 菜单(menu)
菜单 menu ——菜单默认隐藏 ——实现菜单的接口: Menu,父接口,用于创建主菜单 SubMenu继承Menu接口,用于创建子菜单 ContextMenu接口继承Menu接口,用于创建上下文菜单 ...
- JVM执行原理
,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写 ...
- JDBC连接mysql数据库操作详解
1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- HTTP_4_返回结果的HTTP状态码
状态码:返回请求结果. 状态码种类繁多,以下总结常用的状态码: 类别 信息性状态码 1XX 服务器接受请求,继续处理 成功状态码 200 OK 请求处理成功,并返回资源(响应报文中 ...
- isMemberOfClass、isKindOfClass原理分析
isMemberOfClass - 调用者必须是传入的类的实例对象才返回YES- 判断调用者是否是传入对象的实例,别弄反了,如 [s1 isMemberOfClass:p1] ,意思是s1是否是p1的 ...
- Cocos经典游戏教程之仿皇室战争
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 超实用,Linux中查看文本的小技巧
日常开发中,我们经常需要在服务器上进行各种文本,日志的查看操作,本文主要对常用的文本,日志查看技巧进行了一番总结和归纳,方便大家收藏起来后续查看使用: tail命令查看日志信息 实时监控日志: tai ...
- SBT安装及命令行打包spark程序
1.从https://www.scala-sbt.org/download.html官网上寻找所需要的安装包 可以直接本地下载完扔进去也可以wget路径,在这里我用的是sbt1.2.8版本的,下载到/ ...
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...
- 十分钟入门流处理框架Flink --实时报表场景的应用
随着业务的发展,数据量剧增,我们一些简单报表大盘类的任务,就不能简单的依赖于RDBMS了,而是依赖于数仓之类的大数据平台. 数仓有着巨量数据的存储能力,但是一般都存在一定数据延迟,所以要想完全依赖数数 ...