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 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...
随机推荐
- Java IO 为什么我们需要缓冲区
在执行IO操作我们通常会设置一个字节数组作为缓冲区用来写/读数据,一般情况下一个合理大小的缓冲区是有利于提升性能的,但是有一个问题一直困扰着我,为什么缓冲区可以提升IO操作的性能? 经查阅资料之后,总 ...
- cookbook_元编程
1给函数添加一个包装 问题:给函数加一个外包装层,已添加额外的处理,例如,记录日志,计时统计等 解决方案:可以定义一个装饰器来包装函数 2编写装饰器时如何保存函数的元数据 问题:当一个函数被装饰器装饰 ...
- PHP与ECMAScript_7_流程控制
PHP ECMAScript 顺序结构 默认从上到下依次执行 默认从上到下依次执行 分支结构 if / switch if / switch 循环结构 for / while / do-w ...
- Linux中bash shell环境变量
别名 别名是命令的快捷方式.为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用.语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令.重要的 ...
- java往文本文件中写入信息并修改
题目要求: 1.可以往一个文本文档中写入员工信息:name,id和详情 2.可以更改name package FanCQ.Xue.practice; import java.io.*;import j ...
- 【iOS】Interface Builder 预览
Interface Builder 为最顶层视图提供了 Simulated Metrics,预览用户界面的各种外观设置效果,例如顶部有导航栏或底部有标签栏的效果,如图所示:
- Java集合系列(一)List集合
List的几种实现的区别与联系 List主要有ArrayList.LinkedList与Vector几种实现. ArrayList底层数据结构是数组, 增删慢.查询快; 线程不安全, 效率高; 不可以 ...
- Android 9.0 关机流程分析
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...
- 封装 Gson 解析Json到对象是否失败
在使用Google的 Gson 类库解析 Json 数据时,难免会出现解析失败的情况. 在这种情况下,使用 if(obj == null) 是不可行的,fromJson 方法会自动生成对象的实例,所以 ...
- redis缓存介绍以及常见问题浅析
# 没缓存的日子: 对于web来说,是用户量和访问量支持项目技术的更迭和前进.随着服务用户提升.可能会出现一下的一些状况: 页面并发量和访问量并不多,mysql足以支撑自己逻辑业务的发展.那么其实可以 ...