Docker入门之二镜像
Docker大部分的操作都是围绕三大核心概念:镜像、容器、仓库。学Docker首先得了解这几个词。这几个词可能平时也会有涉及,但Docker中可能不是同样得概念。
一、三大核心概念
镜像:可能在安装软件操作系统的时候可能会用到镜像,Docker中的镜像也操作系统镜像文件类似,可以理解成是一个模板,这个有点类似手机app应用。
容器:容器就是用来装东西的,Docker中容器用来装什么呢,它用来装由镜像创建的应用运行实例。这个有点类似手机中的沙盒,每个手机app都用自己的运行环境,不受其他app的影响。
仓库:仓库也是用来存放东西的,它是一种静态的,存放的是镜像文件,而容器是一种动态的,运行的是镜像。这个有点类似app store,用户可以从仓库中下载app安装到手机中,手机中每个应用都是一个沙盒环境。
三大核心一篇博客是写不完的,一个一个的来,今天先学习下镜像image。首先在学习Docker时如果有的地方比如参数什么的不知道了,我们可以通过help来熟悉,比查其他的资料书快多了。如果我们不知道怎么用了,我们可以先通过docker --help来获取大的知识点,然后找到对应的小的知识点,然后再help,而且英文注释也不是很难。


二、镜像
Docker运行容器前需要本地存放有对应的镜像,如果镜像没有,会存默认的仓库下载,既然是默认仓库那肯定是公共的,当然也可以自定义自己私有的镜像仓库。
1.获取镜像
使用镜像首先得获取镜像,使用pull来拉取镜像文件到本地。使用它还是先看help。可以看到它得格式和一些参数说明。
docker pull --help

下图是使用pull来获取hello-world镜像。tag是取最新得。

2.查看镜像
使用docker images --help来查看格式和参数说明

下面截图中使用了-a、--digests、--no-trunc -q

3.使用tag添加镜像标签 还是先help

这里我还是使用hello-world镜像,给它一个标签myhello-world,可以留意下它们两个的id,其实它们指向同一个镜像,只是给它起了个别名。

4.使用inspect查看详细信息,还是老套路,看help

通过inspect查看hello-world的信息

5.使用history查看镜像历史记录
第一步还是通过help查看格式和参数

下面使用history查看hello-world的记录

6.镜像查找
可以使用search来查找镜像,还是help来查看格式和参数

下图是查找hello-world 镜像,这个查找stars>3的

7.删除镜像
还是先看help,使用rmi时,如果通过标签删除镜像时,如果该镜像只有一个标签,那在删除标签之后也会把该镜像也删除,如果有多个标签那只删除对应的标签,如果通过ID删除,如果该镜像创建的容器存在是镜像文件无法删除,其次会尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

- 使用标签删除镜像
下面删除了myhello_world的镜像,然后查看镜像列表,发现只有hello-world了。

2.使用镜像ID删除镜像
下图可以看到,我想通过id删除镜像hello-world时,有一个错误,说不能删除,因为这个镜像在被容器8a2faee3dfa4使用,使用ps查看容器,还真有一个容器id是这个。


那直接删除镜像不行,该怎么正确删除呢?我们可以先删除依赖镜像的所有容器,然后再来删除镜像。

上图尝试删了几次,一直提示有冲突,把所有与它依赖的容器删完了,才能删除镜像,这确实有点麻烦,其实可以使用-f参数强制删除,不过这中太暴力了。
8.创建镜像
还是通过help来查看格式以及参数

- 基于已有镜像的容器创建
首先查看下容器记住容器id,然后使用commit提交并将镜像id设置为cuiywhelloworld.
- 基于本地模板导入
还是通过help来查看格式和参数
这里没找到合适的模板就没做实验。暂留着,或者有没有朋友给提供一个能在window下使用的模板。
9.存出和载入镜像
- 存出镜像
可以使用save来存出镜像 通过-o来指定路径
- 载入镜像
可以使用load来载入镜像
- 实验
下图是我先导出镜像hello-world到E盘,导出后可以在E:\docker下看到helloworld.tar文件,然后又将tar镜像压缩文件导入

10.上传镜像
有pull拉就有push推,使用push可以提交镜像

这里先将cuiywhelloworld添加一个新的标签cuiyw/helloworld,然后通过push cuiyw/helloworld来提交,不过好尴尬,提交请求被拒,失败了。有没有老司机可以直接提交到公共仓库的,等学到仓库得时候再提交试一试。

三、总结
花了昨晚一个晚上加今天一天的时间终于把镜像这块大致学了一下,内容蛮多的,可能截图毕竟多,文字毕竟少,还是方法,按照一定的套路来学,也能很快上手,最重要的还是help。
Docker入门之二镜像的更多相关文章
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- docker学习之二镜像创建
继上一篇docker入门之后写一点使用的经验. 通过命令:docker run -it REPOSITORY或IMAGE ID 注:-it后面跟的字段可以通过下面指令获得 创建运行的容器,会进入一 ...
- 【转载】大白话Docker入门(二)
原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...
- Docker入门(二):安装/卸载
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- Docker入门(二)在docker使用MongoDB
本文将介绍如何在docker中使用MongoDB. 如果你是一名MongoDB的初学者,那么你入门MongoDB的第一件事就是安装MongoDB,但是安装MongoDB又不是一件简单的事情,还 ...
- docker入门(二)
打造自己的镜像 首先我们启动busybox镜像为容器,在该容器中安装一个小工具,再将这个容器保存为新的镜像 首先我们下载一个镜像,再启动容器 [root@centos ~]# docker pull ...
- Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...
- docker 入门 (二)基本操作
这一篇讲docker的基本操作. 请自行安装docker到自己的电脑上. 镜像的获取 要获取镜像,最简单的当然是从仓库去获取,docker的官方网站很不好练,其他的可选项有docker中国官网,阿里镜 ...
- 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker
Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...
随机推荐
- Thinkjs学习2—数据库的配置
以github登录认证为例,说明如何通过mvc三部分的配合,实现这个功能. 要实现的功能:首页判断用户是否登录,如果没有登录,显示登录界面,用户点击按钮进入github登录验证,并保存用户的信息,登录 ...
- Servlet使用简介
Servlet的使用基本包含三个步骤: 1.继承HttpServlet 或实现Servlet 接口 (根据源码分析最终都是对servlet接口的实现) 2.配置地址: 配置web.xml 或者用注解的 ...
- C#中MessageBox.Show()方法详解
1. // 摘要: // 显示具有指定文本的消息框. // // 参数: // text: // 要在消息框中显示的文本. // // 返回结果: // System.Windows.Forms.Di ...
- 开源分享 Unity3d客户端与C#分布式服务端游戏框架
很久之前,在博客园写了一篇文章,<分布式网游server的一些想法语言和平台的选择>,当时就有了用C#做网游服务端的想法.写了个Unity3d客户端分布式服务端框架,最近发布了1.0版本, ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- java与32/64位虚拟机
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt232 32位电脑与64位电脑有什么不同? 我们通常说的64位技术是相对于32 ...
- 使用spring框架处理编码问题
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp90 我们在开发时,经常要对中文字符进行处理,进行处理中文字符的方式也 ...
- 【C++小白成长撸】--矩阵乘法程序
矩阵乘法是大学矩阵课程中,相比矩阵加减法比较困难的部分. 矩阵乘法的原理: 矩阵乘法在代码中实现 得到目标矩阵的一个元素,涉及两个求和符号,一个求和符号一个for循环,两个求和符号两个for循环,再加 ...
- vue中数据双向绑定的实现原理
vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下. 首先大致学习了解下Object.defineProperty()这个东东吧! * Objec ...
- poj3723 MST好题 kruskal
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...