docker镜像操作

docker有三大核心概念:镜像,容器,仓库

镜像(image)在三大核心概念中最为重要,是docker容器运行的前提。每个容器在运行前都需要有一个与之对应的镜像。如果镜像没保存在本地,docker会尝试先从镜像仓库中下载。

镜像与容器的关系,类似于面向对象编程中的类与对象,一个类可以实例化多个对象,一个镜像也可以实例化多个容器。

获取镜像

镜像是运行容器的前提,官方的docker store提供了大量的镜像并开放下载

下载镜像

docker pull NAME[:TAG]

NAME是镜像仓库的名称,TAG是镜像的标签(用于表示版本信息)

示例:

获取一个ubuntu14.04的基础镜像

docker pull ubuntu:14.04

root@DESKTOP-Q6DMNFI:~# docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
c954d15f947c: Pull complete
c3688624ef2b: Pull complete
848fe4263b3b: Pull complete
23b4459d3b04: Pull complete
36ab3b56c8f1: Pull complete
Digest: sha256:e1c8bff470c771c6e86d3166607e2c74e6986b05bf339784a9cab70e0e03c7c3
Status: Downloaded newer image for ubuntu:14.04

查看本地镜像

root@DESKTOP-Q6DMNFI:~# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
ubuntu                     14.04               dc4491992653        4 days ago          222MB

如果不指定标签,默认会下载latest(最新版)的镜像。如docker pull ubuntu将下载ubuntu:latest镜像

从刚才下载的过程中,可看到ubuntu镜像不是作为一个独立的文件,而是由多个层(layer)组成的。

docker分层.png

每个层都有一个惟一的id, 使用docker pull下载时会获取并输出镜像的各层信息

分层的好处在于:当不同的镜像包括相同的层时,本地仅存储层的一份内容,可节省存储空间

下载镜像后,即可随时使用该镜像,如利用ubuntu:14.04创建一个容器,并在该容器中执行ping localhost命令

启动容器

查看镜像信息

docker images 列出本地主机上已有镜像的基本信息

镜像信息.png

镜像大小信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一会,物理上占用的存储空间会小于各镜像的逻辑体积之和

使用tag命令添加镜像标签

使用docker tag命令可以给本地镜像任意添加新的标签,如添加一个新的myubuntu:test镜像标签

docker tag ubuntu:14.04 myubuntu:test

镜像标签.png

添加新标签相当于多了一个镜像,但新增的镜像id与原镜像是一致的,实际上指向同一个镜像文件,只是别名不同。因此,docker tag命令添加的标签实际上起到了类似链接的作用

查看镜像详细信息

docker inspect命令可获取镜像的详细信息,包括制作者、适应架构、各层的数据摘要等:

docker inspect ubuntu:14.04

返回一个JSON格式信息,如果只需要看其中一项的内容,可以用参数进行过滤:

root@DESKTOP-Q6DMNFI:~# docker inspect -f {{".Architecture"}} ubuntu:14.04
amd64

查看镜像各个层的信息

镜像文件是由多个层组成,可以使用history查看各个层的信息

镜像历史

搜索镜像

docker search搜索镜像仓库中的相关镜像

搜索镜像

默认的输出结果按照星级评价倒序排列

删除镜像

使用标签删除镜像

docker rmi myubuntu:test

当同一个镜像拥有多个标签时,以上命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件 但当镜像只剩下一个标签的时候就要小心了,此时就会彻底删除镜像

使用镜像ID删除镜像

docker rmi dc4491992653

指定镜像id,会先尝试删除所有指向该镜像的标签,然后再删除镜像文件本身

如果有基于该镜像的容器正在运行,docker会提示有容器正在运行,无法删除。此时应先将容器关闭m删除,再删除镜像

创建镜像

创建镜像有三种方法:

  • 基于已有镜像的容器创建
  • 基于本地模板导入
  • 基于Dockfile创建

基于已有镜像的容器创建

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

选项说明:

  • -a, --author="": 作者信息
  • -c, --change=[]: 提交时执行Dockerfile指令
  • -m, --message="": 提交消息
  • -p, --pause=true: 提交时暂停容器运行

接下来演示:创建一个容器,新增一个test文件,再将这个容器提交生成为一个新的镜像

root@DESKTOP-Q6DMNFI:~# docker run -it ubuntu:14.04 /bin/bash
root@074a066035a2:/# touch test
root@074a066035a2:/# exit
exit
root@DESKTOP-Q6DMNFI:~# docker commit -m "新增一个test文件" -a "靴子猫" 074a066035a2 test:0.1
sha256:3c23db7d1eb6ed4ce98b06c426b1f0179077cf69ec5d63e423cdd7cb01553f7b

容器ID

查看新创建的镜像:

root@DESKTOP-Q6DMNFI:~# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
test                       0.1                 3c23db7d1eb6        6 minutes ago       222MB

基于本地模板导入

要直接导入一个镜像,可以从OpenVZ下载,然后用docker import导入

假设下载了ubuntu-14.04-x86-minimal.tar.gz压缩包,那么可用以下命令导入:

cat ubuntu-14.04-x86-minimal.tar.gz | docker import - ubuntu:14.04

导出和载入镜像

使用docker savedocker load命令导出和载入镜像

导出镜像

ubuntu:14.04镜像导出为ubuntu_14.04.tar文件

root@DESKTOP-Q6DMNFI:~# docker save -o ubuntu_14.04.tar ubuntu:14.04
root@DESKTOP-Q6DMNFI:~# ls
ubuntu_14.04.tar

导出镜像是一个很有用的功能,可以作为本地备份,也可以分发给其他人使用

载入镜像

将导出的镜像再次导入:

root@DESKTOP-Q6DMNFI:~# docker load --input ubuntu_14.04.tar
Loaded image: ubuntu:14.04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏二进制文集

Docker 动手实战

本文首先介绍 Docker 的整体概念,接着讲述 Docker 的基础用法,网上已经有很多好文章了,本文只是作学习记录使用。

863
来自专栏猿说1024

Docker 常用命令

1893
来自专栏实用工具入门教程

如何部署 Docker Compose

Docker是一个很好的工具,用于在软件容器中自动部署Linux应用程序,但要充分利用其潜力,应用程序的每个组件都应该在自己的单独容器中运行。对于具有大量组件的...

5K3
来自专栏大数据架构师专家

运行第一个docker容器

之前我们已经介绍过如何在centos7下快速安装docker,关于docker安装参考链接:

1721
来自专栏搜云库

Docker Compose 1.18.0 之服务编排详解

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过serv...

40110
来自专栏快乐八哥

运行第一个Docker容器-Docker for Web Developers(1)

1. Docker介绍 Docker由dotCloud公司发起的一个内部项目,后来Docker火了,dotCloud公司改名为Docker了; Docker使用...

20510
来自专栏应兆康的专栏

Docker 简介与安装

Github:https://github.com/yingzk/MyDocker 1. Docker 简介 Docker是一个开源(Github地址: htt...

33312
来自专栏运维前线

使用容器部署静态(HTML)网站

使用容器部署静态(HTML)网站 学习如何使用Nginx来创建一个用于运行静态HTML网站的Docker镜像,会解释如何构建一个运行Nginx与HTML网站的...

2278
来自专栏后台及大数据开发

kubernetes集群搭建(2):docker私有仓库

kubernetes集群搭建(1):环境准备 中各节点已经安装好了docker,请确认docker已启动并正常运行

721
来自专栏搜云库

Docker Compose 1.18.0 之服务编排详解

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过serv...

2427

扫码关注云+社区