zoukankan      html  css  js  c++  java
  • Docker镜像管理

    Docker的镜像是增量的修改,每次创建新的镜像都会在老的镜像上面构建一个增量的,使用到的技术是Another Union File System(AUFS)。

    要创建一个Docker的镜像,可以通过:

    1 从Docker Hub 下载

    2 通过Dockerfile创建

    3 通过 docker import来导入一个容器快照而生成一个新的镜像

    4 通过 docker commit 提交对容器的修改生产一个新的镜像

    5 通过 docker load 来导入一个保存的镜像文件

    使用Docker Hub 查找和下载镜像

    Docker Hub 是Docker官方提供公共仓库,提供大量的常用镜像,由于国内网络原因经常连接Docker Hub会比较慢,所以我们也可以选择一些国内提供类似Docker Hub镜像服务站点。连接Docker Hub的常用命令包括:

    搜索镜像 docker search
    下载镜像 docker pull

    通过Dockerfile创建镜像

    Dockerfile文件里包含若干条命令,每个命令都会创建一个新的层,Dockerfile创建的层数不可以超过127层。

    下面是官方网站上的一个Dockerfile sample

    FROM docker/whalesay:latest
    RUN apt-get -y update && apt-get install -y fortunes
    CMD /usr/games/fortune -a | cowsay

    创建好Dockerfile之后可以通过Docker build来创建image

    $ docker build --help
    Usage:    docker build [OPTIONS] PATH | URL | -
    Build an image from a Dockerfile

    比如 docker build -t imagename:tagname .

    查看本地镜像

    docker images 命令查看本地的镜像列表,信息包括:
        REPOSITORY:仓库名称
        TAG:标签名,一个仓库可以有若干个标签对应不同的镜像,默认都是latest
        IMAGE ID:镜像ID
        CREATED:创建时间,注意不是本地的pull时间
        SIZE:镜像大小

    其中需要注意的是运行容器时候如果不指定镜像的TAG,则默认为latest。镜像的唯一标识符是镜像ID,不是TAG,有的时候同一个镜像可以有不同的TAG,但实际指向的是同一个镜像ID。TAG可以理解为镜像的别名。

    查看镜像详细信息 docker inspect

    docker inspect 可以查看指定镜像的详细信息。这条命令可以查看容器或镜像的详细信息,输出是一个JSON格式的内容,比较重要的信息是创建时间,启动命令等。

    常用的参数是--format, -f, 用来指定输出的格式,比如:

    获取instance的log path

    docker inspect --format='{{.LogPath}}' $INSTANCE_ID

    导出及导入镜像

    镜像可以被导出到本地文件,也可以从本地文件中加载。导出命令是 docker save 命令,导出后的镜像如果需要导入到新的Docker 服务器,则使用docker load命令。

    docker save

    可以用于备份一个镜像,用法如下:

    $ docker save busybox > busybox.tar
    $ ls -sh busybox.tar
    
    $ docker save --output busybox.tar busybox
    $ ls -sh busybox.tar
    
    $ docker save -o fedora-all.tar fedora
    
    $ docker save -o fedora-latest.tar fedora:latest

    docker load

    从STDIN或者tar 包加载一个镜像

    $ docker load < busybox.tar.gz
    
    $ docker load --input fedora.tar

    注意:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

    更新/删除镜像

    docker commit

    如果需要对镜像进行更新的话,一种方法是创建容器,在容器中进行修改,然后将修改后容器提交到镜像中。提交使用 docker commit命令。

    注意:本方法不推荐用在生产系统中,未来会很难维护镜像。最好的创建镜像的方法是Dockerfile,修改镜像的方法是修改Dockerfile,然后重新从Dockerfile中构建新的镜像。

    docker commit -m 'add 3 dirs' -a 'author' -p updateimage newimage

    几个参数的说明:

    • -m 本次提交的描述
    • -a 指定镜像作者信息
    • -p 提交时暂停容器运行
    • 容器的ID或名称
    • 目标镜像

    如果指定了目标镜像,Docker会创建新的镜像。

    docker rmi

    docker rmi命令可以删除本地的镜像,删除前需要先使用docker rm 删除所有依赖该镜像的容器。

    docker rmi -f 可以强制删除存在容器依赖的镜像,但这不是一个好习惯,请先删除容器再清理镜像。

  • 相关阅读:
    算法系列(三)
    .net页面生命周期
    初级程序员的学习方法见解
    .net面向对象学习笔记(二)
    算法系列(二)
    “automation服务器不能创建对象”的问题的解决方案大全
    UNKNOWN.RPT 无法将请求提交后台处理
    水晶报表ActiveX控件打印
    .net中调用js乱码解决办法
    GridView自动序号
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/6418619.html
Copyright © 2011-2022 走看看