Docker镜像

概述

前面我们说了Docker的基本概念,这里我们把每一块内容进行详细疏理一下,本篇主要讲的是Docker的镜像相关内容。

注:本篇内容主要以《Docker从入门到实践》中镜像一模块为主线,结合自身实践过程整理出来的。

本篇中我们主要讲如下几块内容:


获取镜像

Docker获取镜像的命令为 : docker pull

首先我们来看一下该命令的使用

可以看到docker pull命令的使用非常简单,后面根上镜像名就可以。如果不清楚Docker仓库中是否有该镜像存在,可以先使用docker search查询一下是否有该镜像

比如我们查询一下是否有ubuntu这个镜像

$ sudo docker search -s 10 ubuntu

因为Docker Hub中不仅仅只存放了官方定义的镜像还有其他第三方存放进去的镜像,这里我们使用-s 星级来查询星级比较高的镜像。

接下来我们从官方镜像中下载ubuntu:14.04这个镜像,具体命令如下:

$ sudo docker pull ubuntu:14.04

docker pull执行的时候会把每一层信息都打印出来,不过从Docker Hub上下载实在是太慢了,像蜗牛一样在那爬啊爬。受不了的情况下直接使用国内的镜像,这里以docker.cn为例进行下载,使用其他镜像下载时只需要指定镜像地址即可。

$ sudo docker pull docker.cn/docker/ubuntu:14.04
在pull的时候遇到了两个报错,分别是:

2014/11/10 17:20:38 Error: Invalid registry endpoint https://docker.cn/v1/: Get https://docker.cn/v1/_ping: dial tcp: i/o timeout. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry docker.cn` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/docker.cn/ca.crt
2014/11/10 17:20:52 Error: Get https://docker.cn/v1/_ping: dial tcp: i/o timeout
你在下载的过程中也可能会遇到这两个问题,没事,多pull几次就能pull下来了。



列出镜像

使用docker images来查看本地下载(导入)的镜像

$ sudo docker images


REPOSITORY : 指明镜像来自于哪个仓库,这里是从docker.cn上下载的。

TAG : 镜像的标记。

IMAGE ID : 镜像的ID值,该值是唯一的,有相同ID值的镜像是同一个镜像,从上面可以看到这4个镜像都同一个镜像,只不过打了不同的TAG而已。

CREATED : 镜像的创建时间。

VIRTUAL SIZE : 镜像的大小。

创建镜像

修改已有镜像

首先我们先启动一个容器

$ sudo docker run -t -i ubuntu:14.04 /bin/bash

这里我们就进入了一个新的容器中,接下来在刚启动的容器中更新一下系统。

更新完之后退出该容器,退出容器有两种方式:1、输入exit然后回车;2、使用Ctrl+d可以直接退出该容器

现在,刚才使用的容器已经被修改了,我们可以使用docker commit命令提交更新后的副本(生成新镜像)

docker commit有三个参数-a指定提交人-m指定提交信息-p在提交容器是是否终止容器。

下面我们来把刚才的容器提交一下,如果不记得刚才启动的容器了可以使用docker ps -l来查看一下刚才启动的容器。

$ sudo docker commit -m "update ubuntu" -a "mhy2011@gmail.com" bf37f3794b16 mhy_ubuntu

可以看到,提交了之后我们本地就新增加了一个镜像。

利用Dockerfile来创建镜像

关于Dockerfile的使用,后面专门写一篇来讲解,此处不再多说。

从本地文件系统导入

由于GFW的原因,国内用户要从Docker Hub上下载一个镜像非常缓慢,这就要求国内用户要么采用国内提供的镜像(dockerpool或docker.cn)或者使用openvz提供的模板来进行创建。

openvz模板下载地址:http://openvz.org/Download/templates/precreated

这里我们以centos6为例

$ wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz

下载完该模板之后我们就可以使用docker import命令导入该镜像了。

$ cat centos-6-x86-minimal.tar.gz |docker import - centos:centos6
在使用该命令导入时,本地操作出现了如下情况:

提示/var/run/docker.sock没有权限,查看了一下当前用户没有操作该文件的权限,授权一下之后即可。

然后再次执行该命令导入就能把该模板导入为一个镜像了。


导入和导出镜像

导出镜像

Docker允许把镜像导出到本地文件,导出命令为docker save,首先我们来看一下该命令的使用方式。

$ sudo docker save --help

可以看到docker save的命令使用非常简单,就一个-o参数来指定把镜像输出到哪个文件中。

前面我们已经下载了一些镜像,这里我们把ubuntu:14.04这个镜像输出的文件ubuntu1404.tar中

$ sudo docker save -o ubuntu1404.tar ubuntu:14.04
导出成功之后就可在在本地文件下查看到该文件了


导入镜像

Docker使用docker load命令把导出到本地的文件再次导入到本地镜像库

比如我们可以把刚才导出的镜像文件ubuntu1404.tar再次导入到本地镜像库

$ sudo docker load -i ubuntu1404.tar


移除镜像

移除镜像命令为docker rmi

docker rmi可以一次性移除一个或多个镜像,移除镜像可以指定镜像ID或镜像名称均可以移除指定的镜像,此处我们以刚才导入进来的centos为例。

$ sudo docker rmi centos:centos6

可以看到本地仓库下centos的镜像已经被删除了。

在移除镜像之前要确保该镜像下没有容器了(包括已经停止的容器),否则该镜像无法进行删除,先要使用docker rm删除该镜像下所有的容器之后才能移除该镜像。

比如我们移除镜像ubuntu:14.04就无法直接移除,因为该镜像下有容器依赖。

关于镜像的内容就暂告一段落,后面会继续提供关于容器相关的内容。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值