docker系列导读

一文带你读懂什么是docker

Docker安装部署

10张图带你深入理解Docker容器和镜像

前言

学习Docker,我们需要掌握它的三大核心概念:镜像容器仓库

今天先带大家学习Docker镜像相关的基础知识。

Docker镜像简介

1、什么是镜像?

Docker镜像是一个只读的模板。如果读者之前是VM管理员,则可以把Docker镜像理解为VM模板,如果您是一名研发人员,可以将镜像理解为(class)。

简单说,Docker镜像是一个不包含系统内核而又精简的操作系统。

例如:一个镜像可以包含一个基本的 ubuntu 操作系统环境,里面仅安装了 Nginx 应用程序。可以把它称为Nginx镜像。

2、镜像从哪里来的?

Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。

下载nginx镜像

镜像管理命令

我们先列出镜像相关的命令

1、搜索镜像

docker search 语法
例如,搜索mysql相关的镜像,命令如下:

2、下载镜像

docker pull 语法

通常情况下, 描述一个镜像需要包括“名称标签“信息。

比如下载Ubuntu 18.04系统镜像,命令如下:

若不指定标签,则默认会选择latest标签。测试如下:

在这里特别强调下,不要被latest的字面意思“最新的”所误解了,它只是这个资源库的拥有者约定这样,没有附加作用,更不会自动更新。举个例子,我可以轻易把一个过时的镜像打上latest标签,实验如下:

# docker images web_repo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web_repo 1.0 2e9f372f03a0 44 seconds ago 2.433 MB
web_repo latest 2e9f372f03a0 44 seconds ago 2.433 MB
web_repo 0.9 4986bf8c1536 2 weeks ago 2.433 MB
# docker tag -f web_repo:0.9 web_repo:latest
# docker images web_repo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web_repo 1.0 2e9f372f03a0 About a minute ago 2.433 MB
web_repo 0.9 4986bf8c1536 2 weeks ago 2.433 MB
web_repo latest 4986bf8c1536 2 weeks ago 2.43

这里带latest标签的镜像与0.9版本的镜像是一样的,都是两周前的版本,然而1.0的镜像是一分钟以前的。此时带有latest标签的镜像还是最新版本吗?

3、查看镜像

1)使用images 命令列出本地镜像列表

解释列出的字段信息:

  • REPOSITORY

说明镜像来自哪个仓库,比如 ubuntu 表示ubuntu 系列的基础镜像

  • TAG

    镜像的标签信息,人为标识镜像的不同版本

  • IMAGE ID

镜像的ID,用来唯一标识镜像,如果两个镜像ID相同,表示它们指向同一个镜像,只是标签名称不同而已

  • CREATED

    镜像最后更新的时间

  • SIZE

    镜像大小

2)使用inspect命令查看镜像详细信息

只展示部分

上图返回的是一个JSON格式,内容包括镜像制作者、适应架构、各层的数字摘要等。如果只要其中一项内容时,可使用-f指定,例如,获取镜像的创建时间:

3)使用history命令查看镜像历史

docker pull 下载镜像时也我们发现了镜像文件由多个层组成,可以使用history子命令列出各层的创建信息。例如,查看Ubuntu:18.04镜像的创建过程,命令如下:

注意:由于CREATED BY部分命令过长,被自动截断了,可使用--no-trunc选项输出完整命令。

4、为镜像添加标签

docker tag 语法
为ubuntu:latest镜像添加一个新标签:myubuntu:v1

5、删除镜像

docker rmi 语法

1)使用标签删除镜像

[root@qll251 ~]# docker rmi myubuntu:v1
Untagged: myubuntu:v1

当同一个镜像拥有多个标签时,docker rmi命令只是删除该镜像的一个标签副本,并不影响镜像文件。

2)使用镜像ID删除镜像

 docker rmi 命令后跟镜像ID的前缀即可匹配删除

如果出现以下情况:

仔细观察,发现005d2078bdfa这个镜像id指向了两个repository,因此无法删除。

此时我们可以依次删除该镜像对应的标签即可删除,或者使用-f参数强制删除,命令如下:

3)清除镜像

使用Docker一段时间后,系统中可能会遗留一些临时镜像文件,以及一些未被使用的镜像,可以通过docker image prune命令进行清理。

docker image prune 语法

例如, 如下命令会自动清理临时的遗留镜像文件层, 最后会提示释放的存储空间:

[root@qll251 ~]# docker image prune -f
Total reclaimed space: 1.6 GB

6、存出和载入镜像

1、存出镜像

docker save 语法

例如,导出ubuntu:18.04镜像为本地文件ubuntu:18.04.tar,代码如下:

[root@qll251 ~]# docker save -o /data/ubuntu:18.04.tar ubuntu:18.04
[root@qll251 ~]# ls /data
ubuntu:18.04.tar

- o参数:表示导出镜像到指定的文件中。

2、载入镜像

可使用docker load将导出的tar文件再次导入到本地镜像库。语法格式如下:

docker laod 语法

例如,将ubuntu:18.04.tar文件导入本地镜像库,代码如下:

注意:使用docker load导入的镜像将保留所有的镜像历史记录和元数据信息。后续会我们会在容器章节中与docker load做对比。

7、上传镜像

使用docker push命令默认将镜像上传到Docker Hub官方仓库(需要登录)。命令格式如下:

docker push 语法

例如,将本地的myubuntu:v1镜像上传至官方仓库。代码如下:

1、为 待上传的镜像打上标签
[root@qll251 ~]# docker tag ubuntu:18.04 qinlulu/myubuntu:v1 2、登录到Docker Hub(没有账号的需在官网注册)
[root@qll251 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: qinlulu
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded 3、上传镜像
[root@qll251 ~]# docker push qinlulu/myubuntu:v1
The push refers to repository [docker.io/qinlulu/myubuntu]
28ba7458d04b: Pushed
838a37a24627: Pushed
a6ebef4a95c3: Pushed
b7f7d2967507: Pushed
v1: digest: sha256:b58746c8a89938b8c9f5b77de3b8cf1fe78210c696ab03a1442e235eea65d84f size: 1152

Docker Hub官网地址:

https://hub.docker.com

登录后,验证镜像已上传:

本章命令小结

1、搜索镜像

docker search mysql

2、下载镜像

docker pull ubuntu:18.04

3、列出本地镜像列表

docker images

4、查看镜像详细信息

docker inspect ubuntu:18.04

5、查看镜像历史信息

docker history ubuntu:18.04

6、为镜像添加标签

docker tag ubuntu:latest myubuntu:v1

7、删除镜像

docker rmi myubuntu:v1

8、清除临时镜像文件

docker image prune -f

9、存出镜像

docker save -o ubuntu.tar ubuntu:18.04

10、载入镜像

docker load -i ubuntu.tar

11、上传镜像

docker push qinlulu/myubuntu:v1

Docker系列教程01-使用Docker镜像的更多相关文章

  1. Docker系列教程02-操作Docker容器

    简介 通过前面的学习,相信您已经对镜像有所了解,是时候学习容器了. 容器是Docker的另一个核心概念.简单来说,容器是镜像的一个运行实例.正如从虚拟机模板上启动VM一样,用户也同样可以从单个镜像上启 ...

  2. springCloud系列教程01:Eureka 注册中心集群搭建

    springCloud系列教程包含如下内容: springCloud系列教程01:Eureka 注册中心集群搭建 springCloud系列教程02:ConfigServer 配置中心server搭建 ...

  3. Docker系列教程04-Docker构建镜像的三种方式

    简介 创建镜像的方法主要有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建. 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像. 1.基于容器构建镜像 基于已有 ...

  4. Docker系列教程01-Centos7安装新版Docker教程(10步)

    最近一直忙于开发,没有时间好好总结一下docker的知识.其实现在docker的教程已经很多很多了,但是很多系统的教程都是基于Ubuntu系统,因为官方推荐使用Ubuntu系统啊,原因在于Ubuntu ...

  5. Docker系列06—基于容器制作镜像并上传到Docker Registry

    本文收录在容器技术学习系列文章总目录 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容器制作镜像:基于dockerfile 制 ...

  6. Docker系列教程03-Docker私有仓库搭建(registry)

    简介 仓库(Repository)是集中存放镜像的地方,又分为公共镜像和私有仓库. 当我们执行docker pull xxx的时候,它实际上是从registry.docker.com这个地址去查找,这 ...

  7. Docker系列教程05 容器常用命令

    https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...

  8. Docker系列06:Linux修改docker镜像和容器数据存储位置

    指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...

  9. docker系列(二):镜像

    1 引言 将docker与汽车生产线类比,如果说docker引擎是汽车生产车间,那么容器就是最终的产品——汽车,而本节要介绍的镜像就如同汽车设计图纸,其重要性不言而喻——只有有了设计图(镜像),才能生 ...

随机推荐

  1. rabbitmq 中 vhost 的作用是什么?

    vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列.绑定.交换器和权限控制: vhost通过在各个实例间提供逻辑上分离,允许你为不同应用程序安全保密地运行数据: vhost是AM ...

  2. 使用 Redis 有哪些好处?

    1.速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查 找和操作的时间复杂度都是 O1) 2.支持丰富数据类型,支持 string,list,set,Zset,hash ...

  3. java-IO异常处理

    以前的异常处理 public class Demo3 { public static void main(String[] args) { //提高fw的作用域 //变量定义的时候可以没有值,但是使用 ...

  4. java-与文件相关

    java.nio.file 表示non-blocking 非阻塞io(输入和输出) 一个 Path 对象表示一个文件或者目录的路径,是一个跨操作系统(OS)和文件系统的抽象 java.nio.file ...

  5. 单片,SOA 和微服务架构有什么区别?

    单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密 封装.第一个面向服务的架构是一种相互通信服务的集合.通信可以涉及简单的数 据传递,也可以涉及两个或多个协调某些活动的服务.微服务架构是 ...

  6. Linux用户无法使用sudo命令

    新建的用无法使用sudo命令,出现这样的提示: xiaojing is not in the sudoers file. This incident will be reported 原来是新建的用户 ...

  7. Java Lambda详解

    Lambda表达式是JDK 8开始后的一种新语法形式. 作用:简化匿名内部类的代码写法 简化格式 (匿名内部类被重写方法的形参列表) -> { 重写方法 } Lambda表达式只能简化函数式接口 ...

  8. 企业流程再造(BPR)--系统重构

    企业流程再造(BPR) 企业流程:指生产或服务过程中一连串活动的工作流程 企业流程再造:对企业流程所进行的根本性的在思考和彻底的再设计,以使企业的速度,质量,服务和成本等关键业绩指标获得根本性的改善

  9. Numpy中重要的广播概念

    Numpy中重要的广播概念 广播:简单理解为用于不同大小数组的二元通用函数(加.减.乘等)的一组规则 广播的规则: 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1 如果shape ...

  10. 14_Nonlinear Basic Feedback Stabilization_非线性系统稳定性设计

    非线性系统线性化的方式:泰勒展开近似线性化(2_线性化_泰勒级数_泰勒公式_Linearization).反馈线性化,本文使用的是反馈线性化 从图中可知道输入u非常大达到了900多,所以直接使用u消去 ...