在主机上列出镜像

sudo docker images

每从Docker Hub下载一个镜像就会启动相对的创建一个容器

在镜像列表中看到三个重要的东西:

  • 来自什么镜像源,例如ubuntu
  • 每个镜像都有标签,例如14.04
  • 每个镜像都有镜像ID

运行一个带标签镜像的容器:

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

如果不指定一个镜像的版本标签,例如你只使用Ubuntu,Docker将默认使用Ubuntu:latest镜像

建议使用镜像时指定一个标签


获取一个新的镜像

docker pull命令来下载

sudo docker pull centos

注:有时候下载比较慢,可以使用国内第三方库下载

sudo docker pull dl.dockerpool.com:/ubuntu:12.04

查找镜像

可以去网上的查找docker hub 的镜像

或者使用命令行

sudo docker search sinatra

可以看到列表中有镜像名称、描述、Stars(衡量镜像的流行度-如果用户喜欢这个镜像他就会点击stars)和官方自动构建镜像状态

Stackbrew维护者官方仓库源,镜像源是自动构建的,可以验证图像的来源和内容

两种类型的镜像,像ubuntu镜像,我们称它为基础镜像或者根镜像

这些镜像是由docker公司提供建立、验证和支持

还有一种就是用户镜像,例如training/sinatra


创建自己的镜像

如果公共镜像源中没有想要的镜像,可以跟新镜像或者创建镜像达到目的

  • 1.我们可以从已经创建的容器中更新镜像,并且提交这个镜像。
  • 2.我们可以使用Dockerfile指令来创建一个镜像。

更新一个镜像,首先我们要创建一个我们想更新的容器

sudo docker run -t -i training/sinatra /bin/bash

在我们的容器内添加json

gem install json

然后通过用docker commit来提交这个容器

sudo docker commit -m="added json gem" -a="admln" 7cdb7bf497a7 admln/sinatra:v2

注意:root@7cdb7bf497a7: 中7cdb7bf497a7是这个容器的短ID

-m 标示是允许我们指定提交的信息,就像你提交一个版本控制,-a 标示允许对我们的更新指定一个用户

admln为新的用户名字,保留了原有的镜像名称sinatra,最后为镜像指定了一个标签 v2


使用Dockerfile创建镜像

创建一个Dockerfile其中包含一组指令告诉docker如何创建镜像

创建一个目录,并且创建一个 Dockerfile

$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile
# This is a comment
FROM ubuntu:14.04
MAINTAINER admln <admln@example.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

每一个指令会让镜像创建一个新的层

每个指令前缀都必须大写

使用 注释

第一个指令FROM告诉Docker使用哪个镜像源,在这个案例中使用了一个Ubuntu 14.04基础镜像

使用MAINTAINER指令指定谁是维护者

最后指定三个RUN指令,一个RUN指令在镜像内执行命令。例如安装包

使用 docker build 命令和 Dockerfile 命令来创建一个镜像

sudo docker build -t="admln/sinatra:v3" ./sinatra/

-t 来标示我们的新镜像,用户是admln、仓库源名称sinatra、标签是v3

./sinatra/ 来指定Dockerfile

docker做的第一件事是通过你的上下文构建。基本上是目录的内容构建。docker会根据本地的内容来在docker进程中去构建

下一步Dockerfile一步一步执行命令,每个步骤可以创建一个新的容器,在容器内运行指令并且提交改变,就像早期看到的docker commit流程,当所有的指令执行完成之后,就会得到324104cde6ad镜像(有助于标记admln/sinatra:v3),然后所有中间容器会被删除干净


设置镜像标签

以给现有的镜像添加标记,然后提交和构,使用 docker tag 命令

sudo docker tag 3dc27133f65d admln/sinatra:devel

向Docker Hub推送镜像

sudo docker push admln/sinatra

主机中移除镜像

sudo docker rmi training/sinatra

注: sudo docker rm *    为移除容器。


镜像导入

要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为 templates 。

比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:

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

镜像存出

要导出镜像到本地文件

sudo docker save -o ubuntu_14..tar ubuntu:14.04

镜像载入

可以使用 docker load 从导出的本地文件中再导入到本地镜像库

sudo docker load --input ubuntu_14..tar

或者

sudo docker load < ubuntu_14..tar

docker实现增量修改和维护的原理:

每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去


docker镜像的操作的更多相关文章

  1. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  2. Docker镜像文件操作

    1什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式).最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永 ...

  3. 【快学Docker】Docker镜像相关操作

    前言 镜像是Docker的三大核心概念之一(另外两个分别是:容器和仓库). Docker运行容器前需要本地存在镜像,如果本地不存在镜像,Docker则会尝试从远端仓库拉去镜像.镜像是Docker一大核 ...

  4. Docker 镜像的操作

    1. 从docker 镜像仓库获取镜像 docker pull  [镜像名] 从 docker hub 中查看版本 获取 特定版本  docker pull centos 7.6.1801 2.    ...

  5. 关于 Docker 镜像的操作,看完这篇就够啦 !(上)

    文章首发于微信公众号: 小哈学Java 镜像作为 Docker 三大核心概念中,最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录 ...

  6. docker 镜像管理操作

    镜像特点 1. 分层存储的文件 2.一个软件运行环境 3.一个镜像可以创建多个容器 4.一种标准交付 5.不包含Linux内核而又精简的Linux操作系统 6.不是一个单一的文件而是由多层构成的,可以 ...

  7. docker镜像常用操作的基本命令

    1.拉取/下载镜像 docker pull 镜像名称       (可以从网易云镜像中心获取要下载的镜像) 2.查看已经下载的镜像 docker images 3.删除本地镜像 docker rmi ...

  8. Docker 镜像小结---操作指令介绍(七)

    目录 一.搜索镜像 二.下载镜像 三.查看本地镜像 四.显示镜像构建历史 五.删除镜像 六.镜像创建 七.上传镜像 八.给镜像打 tag 九.存出和载入镜像 一.搜索镜像 很多情况下我们可能需要下载某 ...

  9. Docker镜像相关操作

    批量导入镜像 ll *.tgz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash 批量打tag docker images | se ...

随机推荐

  1. c++面试题总结(2)

    1. C中static有什么作用 (1)隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命 ...

  2. <<海闻电子发票接口 ESB 封装 代码指示 文档>>

    <<海闻电子发票接口 ESB 封装 代码指示 文档>> isValid 是否有效标志 代码 中文 说明 true 成功 false 失败   code 海闻错误说明 代码 中文 ...

  3. 用jstack工具分析java程序

    最近做项目时遇到了一个问题,我的多个采集线程中,有一个线程经常挂起,线程并没有死掉,但是一直采集不到数据,为了解决这个问题,用到了jstack. 首先查找到java进程的pid,ps -ef|grep ...

  4. utf8 和 UTF-8 的区别

    只有在MySQL中可以使用“utf-8”的别名“utf8”,但是在其他地方一律使用大写“UTF-8”.

  5. nyoj117 求逆序数

    求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...

  6. 咏南C/S开发框架支持最新的DELPHI XE8开发

    特大好消息:咏南C/S开发框架支持最新的DELPHI XE8开发!咏南开发框架让你再无开发工具升级后顾之忧! 购买咏南开发框架送项目源码!

  7. StringBuffer与StringBuilder的异同

    一. 相同之处        1.均是可变字符序列,可以随机的改变字符串,如追加操作或插入操作 2. 均使用了内部缓冲区,并且当内部缓冲区溢出后均会自动增大 二. 不同之处       1. Stri ...

  8. 基于KVM的虚拟化研究及应用

    引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率.随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为 ...

  9. MHA高可用+VIP 集群故障转移(已测试成功)

       服务器部署说明192.168.158.201 mha管理,mysql主服192.168.158.202 mha节点,mysql从服192.168.158.203 mha节点,mysql从服Man ...

  10. 收集计算机分区信息,去除列中的重复值(Excel)(空行)

    收集计算机分区信息 $servers = gc D:\serverlist.txt $result = $results = $null $results = @() foreach ($server ...