使用 Docker 镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

获取镜像

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

Docker 镜像仓库地址:

地址的格式一般是  <域名/IP>[:端口号]  。默认地址是 Docker Hub。

仓库名:

仓库名是两段式名称,即  <用户名>/<软件名>  。对于 Docker Hub,如果不给出用户名,则默认为  library  ,也就是官方镜像。

例如拉取ubuntu:18.04

docker pull ubuntu:18.04

没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是  ubuntu:18.04  ,因此将会获取官方镜像  library/ubuntu仓库中标签为  18.04  的镜像。

从下载过程中可以看到镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的  sha256  的摘要,以确保下载一致性。

Docker Hub 下载镜像非常缓慢,可以配置加 镜像速器。

运行

启动里面的  bash  并且进行交互式操作,交互式启动容器的bash并且查看系统版本信息

docker run -it ubuntu:18.04 bash

cat /etc/os-release

-it  :这是两个参数,一个是  -i  :交互式操作,一个是  -t  终端。打算进入  bash  执行一些命令并查看返回结果,因此需要交互式终端。

ubuntu:18.04  :这是指用  ubuntu:18.04  镜像为基础来启动容器。

bash  :放在镜像名后的是 命令,这里希望有个交互式 Shell,因此用的是bash  。

进入容器后,可以在 Shell 下操作,执行任何所需的命令。这里,执行了

cat /etc/os-release  ,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是  Ubuntu 18.04.1 LTS  系统。最后通过  exit  退出了这个容器。

列出镜像 docker image ls

仓库名  、 标签  、 镜像 ID  、 创建时间  以及  所占用的空间

需要注意的问题是, docker image ls  列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。

查看镜像、容器、数据卷所占用的空间。

docker system df

显示镜像摘要

docker image ls --digests

中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的  docker image ls  列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话:docker image ls -a

补充几个:

docker image ls ubuntu 根据仓库名列出镜像

docker image ls ubuntu:18.04 列出特定的某个镜像,也就是说指定仓库名和标签

docker image ls -f since=mongo:3.2 希望看到mongo:3.2  之后建立的镜像

docker image ls -q 只显示id

docker image ls --format "{{.ID}}: {{.Repository}}"  显示id和仓库名(这个比较好用)

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" 以表格等距显示,并且有标题行,和默认一样,不过自己定义列

删除本地镜像

docker image rm [选项] <镜像1> [<镜像2> ...] 或者直接 docker rmi ...

其中, <镜像>  可以是  镜像短 ID  、 镜像长 ID  、 镜像名  或者  镜像摘要  。

Untagged 和 Deleted  镜像是分层存储的,如果当前镜像还被其他层更高的层使用,或者是别的标签也指向这个镜像,那么所谓的删除就只是删除这个标签对应的就是Untagged,如果只有这一个标签再使用,并且其他层也不依赖这个镜像,那么就会真的执行Deleted。

PS:如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。

清理镜像

docker image prune

它支持的子命令有:

  • -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
  • -f, --force:强制删除镜像文件,无需弹出提示确认;

另外,执行完 docker image prune 命令后,还是告诉我们释放了多少存储空间!

Docker镜像基本使用的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. 理解Docker(2):Docker 镜像

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. 如何合并两个Docker 镜像

    http://www.open-open.com/lib/view/open1437746544709.html 在你的机器上使用docker pull来从Docker Hub下载镜像. docker ...

  4. Docker镜像的管理和创建

    1. Docker镜像和Docker容器:      Docker镜像实际上是一系列的文件系统,通常的Linux系统一般是两层文件系统,bootfs和rootfs,bootfs就是bootloader ...

  5. docker 源码分析 四(基于1.8.2版本),Docker镜像的获取和存储

    前段时间一直忙些其他事情,docker源码分析的事情耽搁了,今天接着写,上一章了解了docker client 和 docker daemon(会启动一个http server)是C/S的结构,cli ...

  6. docker使用阿里云Docker镜像库加速

    官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 官方帮助 阿里云Docker镜像库 阿里云容器Hub服务:http://dev.aliyun.com/search.html 来自云端的容器Hub服 ...

  7. 第四章 使用Docker镜像和仓库(二)

    第四章 使用Docker镜像和仓库(二) 回顾: 开始学习之前,我先pull下来ubuntu和fedora镜像 [#9#cloudsoar@cloudsoar-virtual-machine ~]$s ...

  8. 第四章 使用Docker镜像和仓库

    第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...

  9. 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  10. Docker镜像

    docker镜像123? 额,由于没有实验环境,没有亲手实践,因此理解可能有不对的地方. 反正也是学习笔记,以后再修改吧... docker的镜像跟virtualbox的镜像不一样.在虚拟机中,镜像是 ...

随机推荐

  1. 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】

    一.题目 Kejin Player H 二.分析 因为在当前等级$i$,如果升级失败可能会退回到原来的某一等级$x$,相当于就是失败的期望就是$E + (Sum[i-1] - Sum[x-1]) + ...

  2. 20个最有用的Python数据科学库

    核心库与统计 1. NumPy(提交:17911,贡献者:641) 一般我们会将科学领域的库作为清单打头,NumPy 是该领域的主要软件库之一.它旨在处理大型的多维数组和矩阵,并提供了很多高级的数学函 ...

  3. java重写toString()方法

    toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...

  4. ch2_8_4求解投骰子游戏问题

    思路:递推.到第n步可以从第0步走n步到第n步,从第1步走n-1步到第n步... ...依次类推,=> f(n)=f(0)+f(1)+...+f(n-1) import java.util.Sc ...

  5. C语言中复杂声明的解读和简化

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  6. 2021华为软件精英挑战赛(C/C++实现)-苦行僧的实现过程

    下面给出2021华为软件精英挑战赛参与的整个过程,虽然成绩不是很好,但是也是花了一些时间的,希望后面多多学习,多多进步. 代码已经上传到了Github上:https://github.com/myFr ...

  7. Python3实现短信轰炸机

    短信轰炸机的基本原理:利用某些限制不严格的网站短信注册接口,用Python模拟请求,传入被炸人手机号码,实现轰炸 实现方式:利用requests模块.time模块.完成请求模拟 模块安装: 在终端窗口 ...

  8. [模拟]P1047 校门外的树

    校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,- ...

  9. SpringBoot-13 Dubbo实战

    SpringBoot-13 Dubbo实战 前提: 已经准备好Dubbo-admin和Zookeeper 前置准备 1.创建项目 显示创建一个Empty Project,创建两个Module---&g ...

  10. .NET 6 Preview 3 中 ASP.NET Core 的更新和改进

    原文:bit.ly/2Qb56NP 作者:Daniel Roth 译者:精致码农-王亮 .NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进.以下是本次预览版的新内容 ...