zoukankan      html  css  js  c++  java
  • docker镜像的操作


    在主机上列出镜像

    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:5000/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.04.tar ubuntu:14.04

    镜像载入

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

    sudo docker load --input ubuntu_14.04.tar

    或者

    sudo docker load < ubuntu_14.04.tar

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

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


    欲为大树,何与草争;心若不动,风又奈何。
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/admln/p/operate-docker-image.html
Copyright © 2011-2022 走看看