• 镜像


    镜像是运行容器的前提。

    获取镜像

    docker [image] pull NAME[:TAG]
    NAME 镜像仓库名称,用来区分镜像
    TAG 镜像标签,往往表示版本信息,不显示指定,默认latest标签(跟踪最新版本的变化,不稳定)
    通常情况下描述一个镜像需要包括“名称 + 标签”信息
    镜像文件一般由若干层(layer)组成,当不同的镜像包含相同的层时,本地仅存储层的一份,减小存储空间
    在不同的镜像仓库服务器可能出现镜像同名的情况,镜像的仓库名中还应添加仓库地址(register 注册服务器)作为前缀,默认官方docker hub仓库,前缀可忽略,例如:
    docker pull ubuntu:18.04 相当于 docker pull register.hub.docker.com/ubuntu:18.04

    pull 子命令支持的选项主要包括:

    • -a, --all-tags=false | true: 是否获取仓库的所有镜像,默认否
    • --disable-content-trust: 取消镜像的内容校验,默认真
    • --registry-mirror=proxy_URL: 指定代理服务器地址
     
    下载镜像到本地后,即可使用,例如用该镜像创建一个容器,在其中运行bash应用,执行打印"hello world"
    docker run -it ubuntu:18.04 bash
    root@xxxxxxxxx:/# echo "hello world"

    查看镜像信息

    1. 使用images命令列出镜像

    • docker images
    • docker image ls
    root@ip-172-31-17-146:/etc# docker images
    REPOSITORY  TAG   IMAGE ID       CREATED           SIZE
    centos      latest   9f38484d220f      5 months ago          202MB
    仓库      镜像标签   镜像ID(唯一标识镜像)  创建时间(镜像最后的更新时间)  镜像大小(逻辑体积,优秀的一般体积较小)
    images子命令支持的选项:
    • -a, --all=true | false: 列出所有(包括临时文件)镜像文件,默认为否
    • --digests=true | false: 列出镜像的数字摘要值
    • -f, --filter=[]: 过滤列出的镜像。例如dangling=true只显示没有被使用的镜像;也可指定带有特殊标注的镜像等。
    • --format="TRMPLATE": 控制输出格式。如.ID代表ID信息,.Repository代表仓库信息
    • --no-trunc=true | false: 对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是
    • -q, --quiet=true | false: 仅输出ID信息,默认为否
    其中,还支持对输出结果控制的选项,如 -f, --filter=[], --no-trunc=true | false, -q, --quiet=true | false等
    更多子命令通过 man docker-images 查看

    2. 使用tag命令添加镜像标签

    • docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
    添加一个新的 myubuntu:latest 镜像标签
    docker tag ubuntu:latest myubuntu:latest
    再次使用 docker images ,多了 myubuntu:latest 标签的镜像,ID和ubuntu:18.04完全一致

    3. 使用inspect命令查看详细信息

    • docker [image] inspect
    作者,适应架构,各层的数字摘要等。
    如果想要 获取其中一项,可以使用 -f 来指定,例如获取镜像的 Architecture:
    docker [image] inspect -f {{".Architecture"}} ubuntu:18.04
    {{ ".Architecture" }} Wrong 不能有空格

    4. 使用history命令查看镜像历史

    列出各层的创建信息
    • docker history ubuntu:18.04
    过长的信息被截断了,可以使用 --no-trunc 输出完整命令

    搜寻镜像

    docker search 搜docker hub官方仓库
    docker search [options] keyword
    支持的命令选项主要包括:
    • -f, --filter filter: 过滤输出内容
    • --format string: 格式化输出内容
    • --limit int: 限制输出个数,默认25个
    • --no-trunc: 不截断输出结果
    搜官方提供带nginx关键字镜像:
    root@ip-172-31-17-146:/etc# docker search --filter=is-official=true nginx
    NAME   DESCRIPTION       STARS     OFFICIAL     AUTOMATED
    nginx    Official build of Nginx.    11837      [OK]
    镜像名字   描述           收藏数       是否官方创建      是否自动创建
    搜索收藏数超过4的关键词包括Tensorflow的镜像
    docker search --filter=starts=4 tensorflow

    删除和清理镜像

    1. 使用标签删除镜像

    docker rmi
    docker image rm
    • docker rmi IMAGE [IMAGE ...],其中 IMAGE 可以是标签或ID
    支持选项:
    • -f, -force: 强制删除,即使有容器依赖它
    • -no-prune: 不要清理未带标签的父镜像
    例如删掉myubuntu:latest镜像
    docker rmi myubuntu:latest
    如果一个ID对应多个标签,删的是副本,即取消tag;如果只有一个,则完全删除

    2.使用ID删除镜像

    • docker rmi ID(也可以是能区分的前缀)
    先尝试删除指向该镜像的标签,然后删除该静态文件本身。
    当有该镜像创建的容器存在时,镜像文件默认无法被删除,
    docker ps -a 可以看到本机存在的所有容器
    强制删除使用 docker rmi -f ubuntu:18.04,不推荐。
    正确的做法是,先删除依赖该镜像的所有容器(docker rm),再删除镜像

    3.清理镜像

    遗留的临时镜像文件,没有被使用的镜像
    • docker image prune
    支持选型:
    • -a, -all: 删除所有无用镜像,不光是临时镜像
    • -filter filter: 只清理符合给定过滤器的镜像
    • -f, -force: 强制删除镜像,而不是进行提示确认
    如下命令会清理临时遗留的镜像文件层,最后会提示释放的空间:
    docker image prune -f

    创建镜像

    1.基于已有镜像的容器创建

    • docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    主要选项包括:
    • -a, ---author=""
    • -c, --change=[]: 提交时候执行Dockerfile指令,包括CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | ONBULLD | USER | VOLUME | WORKDIRD等
    • -m, --message=""
    • -p, --pause=true: 提交时暂停容器运行
    $ docker run -it ubuntu:18.04 /bin/bash
    [root@14c020d8328c /]# touch test
    [root@14c020d8328c /]# exit
    $ docker [container] commit -m "Added a new file" -a "Docker Newbee" ID(14c020d8328c) test:0.1
    sha256:e138c5ed2186f264a889377fccd6a3bfe81526f657b330980617d3d7a6374299
    $ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    test 0.1 e138c5ed2186 49 seconds ago 202MB
    centos latest 9f38484d220f 5 months ago 202MB

    2.基于本地模板导入

    • docker [container] import [OPTIONS] file | URL | - [REPOSITORY[:TAG]]
    可以使用openVZ的模板创建
    下载了ubuntu18.04的模板压缩包,之后使用一下命令导入即可:
    cat ubuntu......tar.gz | docker import - ubuntu:18.04

    3.基于Dockerfile创建

    最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
    例如,基于debian:stretch-slim镜像安装Python3环境,构成一个新的python:3镜像:
    FROM debian:stretch-slim
    LABEL version="1.0" maintainer="docker user <docker_user@github>"
    RUN apt-get update &&
    apt-get install -y python3 &&
    apt-get clean &&
    rm -rf /var/lib/apt/lists/*
    创建镜像的过程可以使用 docker [image] build 命令,编译成功后本地将多出一个python:3镜像:
    docker [image] build -t python:3

    存出和载入镜像

    1.存出镜像

    • docker [image] save
    支持参数:
    • -o, -output string: 导出到指定文件
    例如,导出本地的ubuntu:18.04镜像为文件ubuntu_18.04.tar:
    docker save -o ubuntu_18.04.tar ubuntu18.04

    2.载入镜像

    • docker [image] load
    支持参数:
    • -i, -input string
    • <
    例如:
    docker load -i ubuntu_18.04.tar 或者
    docker load < ubuntu_18.04.tar
    导入镜像和相关元信息

    上传镜像

    • docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/] NAME[:TAG]
    默认上传到docker hub(需登陆)
    例如,用户user上传本地的test:latest镜像,可以先添加标签user/test:latest,然后用docker [image] push上传:
    docker tag test:latest user/test:latest
    docker push uset/test:latest
    第一次上传需要登陆,登陆信息保存在本地 ~/.docker 目录下
     
     
    docker image help
    注意积累自己定制的镜像
     
  • 相关阅读:
    JAVA实现图的邻接表以及DFS
    对于JAVA多线程卖票小程序的理解
    我的第一篇博客
    The 'with' and 'as' Keywords
    Buffering Data
    rstrip
    MapFields和并行计算(OpenFOAM)
    Python 调用自己编写的Class
    vs2013和vs2010的配置
    Eclipse的配置
  • 原文地址:https://www.cnblogs.com/catyuang/p/12129867.html
Copyright © 2020-2023  润新知