详解Docker镜像的基本操作方法

目录
  • 一、获取镜像
  • 二、运行镜像
  • 三、列出镜像
  • 四、镜像大小
  • 五、删除本地镜像

一、获取镜像

之前我们提到过 Docker 官⽅提供了⼀个公共的镜像仓库:Docker Hub,我们就可以从这上⾯获取镜像,获取镜像的命令:docker pull,格式为:

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

Docker 镜像仓库地址:地址的格式⼀般是 <域名/IP>[:端⼝号],默认地址是 Docker Hub。

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

$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
bf5d46315322: Pull complete
9f13e0ac480c: Pull complete
e8988b5b3097: Pull complete
40af181810e7: Pull complete
e6f7c7e5c03e: Pull complete
Digest: sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe
Status: Downloaded newer image for ubuntu:16.04

上⾯的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。⽽镜像名称是 ubuntu:16.04,因此将会获取官⽅镜像 library/ubuntu 仓库中标签为 16.04 的镜像。 从下载过程中 可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是⼀层层的去下 载,并⾮单⼀⽂件。下载过程中给出了每⼀层的 ID 的前 12 位。并且下载结束后,给出该镜像完 整的 sha256 的摘要,以确保下载⼀致性。

二、运行镜像

有了镜像后,我们就能够以这个镜像为基础启动并运⾏⼀个容器。以上⾯的 ubuntu:16.04 为例,如果 我们打算启动⾥⾯的 bash 并且进⾏交互式操作的话,可以执⾏下⾯的命令。

$ docker run -it --rm \
ubuntu:16.04 \
/bin/bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

docker run 就是运⾏容器的命令,具体格式我会在以后进⾏详细讲解,我们这⾥简要的说明⼀下上⾯⽤到的参数:

-it:这是两个参数,⼀个是 -i:交互式操作,⼀个是 -t 终端。我们这⾥打算进⼊ bash 执⾏⼀些命 令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会⽴ 即删除,除⾮⼿动 docker rm。我们这⾥只是随便执⾏个命令,看看结果,不需要排障和保留结 果,因此使⽤ --rm 可以避免浪费空间。
ubuntu:16.04:这是指⽤ ubuntu:16.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这⾥我们希望有个交互式 Shell,因此⽤的是 bash。

进⼊容器后,我们可以在 Shell 下操作,执⾏任何所需的命令。这⾥,我们执⾏了 cat /etc/os- release ,这是 Linux 常⽤的查看当前系统版本的命令,从返回的结果可以看到容器内是 Ubuntu 16.04.4 LTS 系统。最后我们通过 exit 退出了这个容器。

三、列出镜像

$ docker image ls

列表包含了仓库名、标签、镜像 ID、创建时间以及所占⽤的空间。镜像 ID 则是镜像的唯⼀标识,⼀个镜像可以对应多个标签。

四、镜像大小

如果仔细观察,会注意到,这⾥标识的所占⽤空间和在 Docker Hub 上看到的镜像⼤⼩不同。⽐如, ubuntu:16.04 镜像⼤⼩,在这⾥是 127 MB,但是在Docker Hub显示的却是 43 MB。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 Docker Hub 所显示的⼤⼩是⽹络传输中更关⼼的流量⼤⼩。⽽ docker image ls 显示的是镜像下载到本地后展开的⼤⼩,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候, 更关⼼的是本地磁盘空间占⽤的⼤⼩。

另外⼀个需要注意的问题是, docker image ls 列表中的镜像体积总和并⾮是所有镜像实际硬盘消 耗。由于 Docker 镜像是多层存储结构,并且可以继承、复⽤,因此不同镜像可能会因为使⽤相同的基 础镜像,从⽽拥有共同的层。由于 Docker 使⽤ Union FS ,相同的层只需要保存⼀份即可,因此实际 镜像硬盘占⽤空间很可能要⽐这个列表镜像⼤⼩的总和要⼩的多。你可以通过以下命令来便捷的查看镜像、容器、数据卷所占⽤的空间。

$ docker system df

五、删除本地镜像

如果要删除本地的镜像,可以使⽤`docker image rm·命令,其格式为:

$ docker image rm [选项] <镜像1> [<镜像2> ...]

或者

$ docker rmi 镜像名

或者⽤ ID、镜像名、摘要删除镜像,其中,<镜像> 可以是 镜像短 ID、镜像⻓ ID、镜像名 或者 镜像摘要。 ⽐如我们有这么⼀些镜像:

$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 3 weeks ago 196.5 MB
redis alpine 501ad78535f0 3 weeks ago 21.03 MB
docker latest cf693ec9b5c7 3 weeks ago 105.1 MB
nginx latest e43d811ce2f4 5 weeks ago 181.5 MB

我们可以⽤镜像的完整 ID,也称为⻓ ID,来删除镜像。使⽤脚本的时候可能会⽤⻓ ID,但是⼈⼯输⼊就太累了,所以更多的时候是⽤短 ID 来删除镜像。 docker image ls 默认列出的就已经是短 ID 了,⼀般取前3个字符以上,只要⾜够区分于别的镜像就可以了。

⽐如这⾥,如果我们要删除redis:alpine镜像,可以执⾏:

$ docker image rm 501
Untagged: redis:alpine
Untagged: redis@sha256:f1ed3708f538b537eb9c2a7dd50dc90a706f7debd7e1196c9264edeea521a86d
Deleted: sha256:501ad78535f015d88872e13fa87a828425117e3d28075d0c117932b05bf189b7
Deleted: sha256:96167737e29ca8e9d74982ef2a0dda76ed7b430da55e321c071f0dbff8c2899b
Deleted: sha256:32770d1dcf835f192cafd6b9263b7b597a1778a403a109e2cc2ee866f74adf23
Deleted: sha256:127227698ad74a5846ff5153475e03439d96d4b1c7f2a449c7a826ef74a2d2fa
Deleted: sha256:1333ecc582459bac54e1437335c0816bc17634e131ea0cc48daa27d32c75eab3
Deleted: sha256:4fc455b921edf9c4aea207c51ab39b10b06540c8b4825ba57b3feed1668fa7c7

我们也可以⽤镜像名,也就是 <仓库名>:<标签>,来删除镜像。

$ docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Deleted: sha256:0584b3d2cf6d235ee310cf14b54667d889887b838d3f3d3033acd70fc3c48b8a
Deleted: sha256:97ca462ad9eeae25941546209454496e1d66749d53dfa2ee32bf1faabd239d38

到此这篇关于Docker镜像的基本操作方法的文章就介绍到这了,更多相关Docker镜像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker 彻底删除私有库镜像的操作

    首先看看网上一般的做法 私有库默认是不支持删除镜像的,需要修改config.yml配置文件,在storage节点下加入 delete: enabled: true ,然后重启私有库. docker 提供的镜像删除api为: DELETE ip:端口/v2/<repository>/manifests/<reference> repository 为镜像的repository reference 为镜像push成功后生成的 digest:sha256 值 获取 digest : cu

  • docker常用命令总结之安装、镜像、容器基本操作

    以下均在centos 7进行的操作 docker安装 yum install -y docker -y:表示在安装过程中按照默认配置进行安装,不需要进行逐步确认 查看已经安装的docker yum list installed | grep docker 删除已经安装的docker yum remove -y docker.x86_64 yum remove -y docker-client.x86_64 yum remove -y docker-common.x86_64 docker服务启动

  • 在docker下删除两个id相同的镜像的操作

    今天建立docker容器的时候由于疏忽,镜像的名字输错了,结果容器创建成功后,镜像中出现两个id相同的: 使用docker rmi e4a35914679d删除的时候执行失败: Error response from daemon: conflict: unable to delete e4a35914679d (must be forced) - image is referenced in one or more repositories 提示应该是该id有两个本地文件,不能用id删除. 所

  • docker利用单个镜像映射到多个端口操作

    需求: 官网的资源服务器肯定不能使用一个实例, 需要多个一起,但是如果继续复制太慢了,我就想能不能直接使用docker镜像,多制造几个相同的容器实例 前后两个docker-compose.yml version: '3' services: micro-hcnet-website-13: image: 172.18.0.1:5000/hcnet-website-12:0.0.1-SNAPSHOT restart: on-failure ports: - 8311:8211 ~ version:

  • Docker重命名镜像名称和TAG操作

    使用docker images时,可能会出现REPOSITORY和TAG均为none的镜像,如下图 这时,我们可以重命名镜像 # docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签) 补充知识:docker image 重命名 docker image 名称不小心写错了,例如想命名为 ubuntu1604-arm-qt,写成了 unbuntu1604-arm-qt.如何改回来? 用 docker tag 重命名 docker images 找到image_

  • Docker和镜像的操作方法

    查找镜像 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 我们也可以使用 docker search 命令来搜索镜像.比如我们需要一个 httpd 的镜像来作为我们的 web 服务.我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像. docker search httpd 拖取镜像 我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像.

  • 给Docker更换国内镜像源操作

    给Docker守护进程配置加速器 通过配置文件启动Docker,修改/etc/docker/daemon.json 文件并添加上 registry-mirrors 键值. vim /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com"] } 修改保存后,重启 Docker 以使配置生效. service docker restart 补充知识:docker配置镜像加速器

  • 详解Docker镜像的基本操作方法

    目录 一.获取镜像 二.运行镜像 三.列出镜像 四.镜像大小 五.删除本地镜像 一.获取镜像 之前我们提到过 Docker 官⽅提供了⼀个公共的镜像仓库:Docker Hub,我们就可以从这上⾯获取镜像,获取镜像的命令:docker pull,格式为: $ docker pull [选项] [Docker Registry 地址[:端⼝]/]仓库名[:标签] Docker 镜像仓库地址:地址的格式⼀般是 <域名/IP>[:端⼝号],默认地址是 Docker Hub. 仓库名:这⾥的仓库名是两段

  • 详解Docker镜像与容器的常见操作

    镜像加速器 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.国内很多云服务商都提供了国内加速器服务,例如: 网易云加速器 https://hub-mirror.c.163.com 阿里云加速器(需登录账号获取): https://cr.console.aliyun.com/cn-hangzhou/mirrors 国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档. 在CentOS7系统

  • 详解docker镜像centos7配置Java运行环境

    1.拉取centos镜像 docker pull centos:7 2.基于拉取到的镜像运行一个容器 docker run -it --name mycentos docker.io/centos:7 /bin/bash 运行起来就直接进入了容器的交互界面 3.容器中安装jdk 首先查询可用的jdk版本 yum search java|grep jdk 根据搜索到jdk进行安装 yum install java-1.7.0-openjdk 安装完成之后可以不用配置环境变量,因为安装完成之后貌似是

  • 详解Docker镜像提交命令commit的工作原理和使用方法

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 下面我们来动手实践. docker pull nginx:1.15.3 用命令行启动一个容器: docker run -d -p 1080:80 --name jerry-nginx nginx:1.15.3 localhost:1080 进入容器的shell: docker exec -it jerry-nginx /bin/bash 查看这个nginx镜像默认的首页: 我想

  • 详解docker pull 下来的镜像都存到了哪里

    docker pull 下来的命令都默认存在/var/lib/docker/文件夹下. 查看/var/lib/docker/image/overlay2/repositories.json文件: 正好和docker images的内容一致. 1.进入docker目录,文件结构如下: 2. 进入containers 目录,这个目录中保存是已拉取的容器ID,即一个序列号,对应一个容器. 随便进入选择一个序列号,进入后发现容器的具体结构如下: 3. 进入image 目录 这个目录中保存的是已拉取的镜像

  • 详解docker pull下来的镜像存储在哪里

    20200804补充:文章可能说法有误.大佬可查询其他答案. docker pull xxx,就可以把想要的镜像拉下来直接使用,但是pull下来的镜像存储在哪里呢?这里做下记录: 此处docker 版本为:Docker version 1.13.1 1. 进入docker目录,如下: root@iZuf6axmuekh1n14dwcufmZ:/# cd var/lib/docker/ root@iZuf6axmuekh1n14dwcufmZ:/var/lib/docker# ls aufs co

  • 详解Docker使用Linux iptables 和 Interfaces管理容器网络

    我使用docker至今已有一段时间了,与绝大部分的人一样,我被docker强大的功能和易用性深深的折服.简单方便是docker的核心之一,它强大的功能被抽象成了非常简单的命令.当我在使用和学习docker的时候,我很想知道docker在后台都做了一些什么事情,特别是在网络这一块(我最感兴趣的一块) 我找到了很多关于创建和操作容器网络的文档,但是关于docker如何使网络工作的却没有那么多. Docker广泛使用linux iptables和网桥接口,这篇文章是我如何用于创建容器网络的总结,大部分

  • 详解Docker Swarm概念与用法

    Docker Swarm是Docker公司开发的容器集群管理服务.从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装. 与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用.但是它与docker-compose兼容的优点,可以弥补一切.对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择. 概念 Docker Swarm,主要包含以下概念: Swarm Node Stack S

  • 详解docker部署Jenkins新手使用教程

    本文通过docker部署Jenkins+Maven+SVN+Tomcat,在基础镜像Jenkins上安装Maven及自带的OpenJDK形成新的镜像,然后通过SVN将项目checkout下来,由Jenkins自带的插件或脚本将Maven生成的war包发送到指定的Tomcat的WebApps目录下,最终启动Tomcat完成自动化部署. 通过docker命令:sudo docker run –d -p 9898:8080 -p 50000:50000 -v /alidata/projects/jen

  • 详解Docker commit的使用

    有时候需要在基础镜像里面安装某些依赖,如果把命令写在Dockerfile里,部分依赖软件下载很慢,构建镜像的时候又会花很长的时间.所以最好是分装一个包含依赖库的新镜像. docker提供commit来实现 比如我有一个python镜像,比较精简.缺乏freetds-dev和unixodbc-dev这两个依赖. 1.先把镜像run起来 docker run -it --name python docker.io/python:3.6.4 /bin/bash /bin/bash进入容器内部进行交互

随机推荐