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 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...
随机推荐
- ASP.NET Core Web Api之JWT VS Session VS Cookie(二)
前言 本文我们来探讨下JWT VS Session的问题,这个问题本没有过多的去思考,看到评论讨论太激烈,就花了一点时间去研究和总结,顺便说一句,这就是写博客的好处,一篇博客写出有的可能是经验积累,有 ...
- 计时器(Chronometer)、标签(TabHost)
计时器(Chronometer) 方法 描述 public Chronometer(Context context)[构造方法] 创建Chronometer对象 public long getBase ...
- 【Git】Found a swap file by the name ".git/.MERGE_MSG.swp"
最近合并分支的时候总是遇到这个问题,导致合并之后还需要再提交一次--有点烦-- 解决方案: 在项目根目录(如/StudioProjects/demo/Leave)下,找到 .git/.MERGE_MS ...
- 【MySQL】导出长数字到 Excel 避免转为科学计数法方法
MySQL 导出比较长的数字到 Excel 时,最后几位会变成 0,解决方法如下: 如果只需要导出展示.打印:可使用 CONCAT("\t",str) 如果需要后续处理,引用,最好 ...
- win10去除快捷方式小箭头
切忌删除注册表项: HKEY_CLASSES_ROOT -> lnkfile -> IsShortcut 这个方法以前是可以的,但是在2018年之后更新的系统就会出现任务栏图标打不开的情况 ...
- 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore
安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...
- 有趣的Flex布局
对于刚接触前端的小白,在还原页面样式的时候,往往会遇到页面布局(layout)上的问题,用着生硬的padding来固定盒子的位置,不仅代码看的沉重,还得适应各种浏览器页面,始终没有办法做到统一.接下来 ...
- 拉格朗日对偶性(Lagrange duality)
目录 拉格朗日对偶性(Lagrange duality) 1. 从原始问题到对偶问题 2. 弱对偶与强对偶 3. KKT条件 Reference: 拉格朗日对偶性(Lagrange duality) ...
- [ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件对话框
本文主要介绍PyQt界面实现中常用的消息弹出对话框.提供用户输入的输入框.打开文件获取文件/目录路径的文件对话框.学习这三种控件前,先想一下它们使用的主要场景: 1.消息弹出对话框.程序遇到问题需要退 ...
- JAVA面向对象面试题带答案(墙裂推荐)
1) 在Java中,如果父类中的某些方法不包含任何逻辑,并且需要有子类重写,应该使用(c)关键字来申明父类的这些方法. a) Finalc b) Static c) Abstract d) Void2 ...