• 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 可以强制删除存在容器依赖的镜像,但这不是一个好习惯,请先删除容器再清理镜像。

  • 相关阅读:
    jS Ajax 上传文件报错"Uncaught TypeError: Illegal invocation"
    layer实现关闭弹出层刷新父界面功能详解
    PHP开发APP接口简单签名全过程(二)实际测试
    PHP开发APP接口简单签名全过程(一)
    Laravel 避免 Trying to get property of non-object 错误的六种方法 [新增第六种 data_get]
    在PHP代码中将HTML代码原样输出的方式
    在使用 Laravel Eloquent 模型时,我们要判断取出的结果集是否为空,但我们发现直接使用 is_null 或 empty是无法判段它结果集是否为空的!!!
    使用layer的iframe层提交表单后,需要关闭当前的iframe层,然后刷新父页面的方法
    laravel中如何实现验证码验证及使用
    递归思想的由来
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/6418619.html
Copyright © 2020-2023  润新知