• Docker学习——Dock镜像


    什么是Docker镜像

    Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。

    • 一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件) 可以把它称为一个 Apache 镜像。
    • 镜像是创建 Docker 容器的基础。
    • 通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
    Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默
    认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,
    使用自定义的镜像仓库。

    获取镜像

    镜像是运行容器的前提, 官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放 下载。
    命令:
    可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命 令的格式为 docker [image] pull NAME [ :TAG]
    其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本
    信息) 。 通常情况下, 描述 个镜像需要包括 名称+标签 信息。

     例如, 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:

    1. [root@openEuler-node1 ~]# docker pull ubuntu:18.04
    2. 18.04: Pulling from library/ubuntu
    3. 7c457f213c76: Pull complete
    4. Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
    5. Status: Downloaded newer image for ubuntu:18.04

    如果没有写 名称+标签“ 信息中的标签,会默认添加一个latest标签,表示这个仓库中最新的镜像

    1. [root@openEuler-node1 ~]# docker pull ubuntu
    2. Using default tag: latest #自动添加的一个标签,获取最新的版本
    3. latest: Pulling from library/ubuntu
    4. bccd10f490ab: Pull complete
    5. Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
    6. Status: Downloaded newer image for ubuntu:latest
    如果从非官方 的仓库 下载,则 需要在仓库 名称前指定完整的仓库地址。例如从网易蜂巢
    的镜像源来下载ubun七u:18.04镜像,可以使用如下命令,此时下载的镜像名称 为pull hub.c.163.com/public/centos:6.5
    1. [root@openEuler-node1 ~]# docker pull hub.c.163.com/public/centos:6.5
    2. 6.5: Pulling from public/centos
    3. 96057de2d572: Pull complete
    4. a3ed95caeb02: Pull complete
    5. 8a1dcc3f76c2: Pull complete
    6. 8fe56c90e86a: Pull complete
    7. 43fc3558431f: Pull complete
    8. 5881bc109689: Pull complete
    9. Digest: sha256:92fd18cda0cbf63bb4b5ffd0c073a9d689d5b202e3b491cbc74488fff1c37d11
    10. Status: Downloaded newer image for hub.c.163.com/public/centos:6.5
    pull 子命令支持的 选项主要包括:
    -a, --all--ags=true|false: 是否获取仓库中的所有镜像,默认为否

    查看镜像

    images命令列出镜像

    使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基
    本信息。

    •  REPOSITORY:来自于哪个仓库
    • TAG:镜像的标签信息
    • IMAGE ID:镜像的ID(唯一标识镜像)

     images子命令主要支持如下选项:

    -a, --all rue I false: 列出所有(包括临时文件)镜像文件,默认为否;
    -f, --fi让er=[] : 过滤列出的镜像, 如dangling rue 只显示没有被使用的
    镜像;也可指定带有特定标注的镜像等;
    使用tag命令添加镜像标签
     docker tag ubuntu:latest myubuntu:latest
    这些myubuntu:latest镜像的ID跟ubunt:latest是 完全一 致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。

     使用inspect命令查看详细信息

    [root@openEuler-node1 ~]# docker inspect ubuntu:18.04 
    上面代码返回的是 JSON 格式的消息,如果我们只要其中 项内容时,可以使
    -f 来指定,例如,获取镜像的 Arch让ect ure
    1. [root@openEuler-node1 ~]# docker inspect -f {{".Architecture"}} ubuntu:18.04
    2. amd64

    搜索镜像

    Docker 镜像的 search 子命令
    -f, --filer fill er: 过滤输出内容;
    --format st ring: 格式化输出内容;
    --limit   int :限制输出结果个数, 默认为 25 个;
    --no-trunc: 不截断输出结果。
    1. [root@openEuler-node1 ~]# docker search busybox
    2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    3. busybox Busybox base image. 3223 [OK]
    4. radial/busyboxplus Full-chain, Internet enabled, busybox made f… 56 [OK]
    5. yauritux/busybox-curl Busybox with CURL 25
    6. arm32v7/busybox Busybox base image. 10
    7. arm64v8/busybox Busybox base image. 8
    8. odise/busybox-curl 4 [OK]
    9. s390x/busybox Busybox base image. 3
    10. .....
    可以看到返回了很多包含关键字的镜像, 其中包括镜像名字、 描述、 收藏数(表示该镜像
    的受欢迎程度)、 是否官方创建、 是否自动创建等。默认的输出结果将按照星级评价进行排序。

     

     删除和清理镜像

    删除就rm  -f参数是强制删除,可以基于ID或者标签删除

    docker rmi busybox:latest
    使用Docker 段时间后, 系统中可能会遗留一些临时的镜像文件, 以及 些没有被使
    用的镜像, 可以通过docker image prune命令来进行清理。
    • -a, -all: 删除所有无用镜像, 不光是临时镜像;
    • -filter filter: 只清理符合给定过滤器的镜像;
    • -f, -force: 强制删除镜像, 而不进行提示确认。

    创建镜像

    1基于已有容器创建

    该方法主要是使用 docker [container] commit 命令

    演示:

    首先, 启动一个镜像, 并在其中进行修改操作。 例如, 创建一个test文件, 之后退出, 代码如下:

    1. [root@openEuler-node1 ~]# docker run -it ubuntu:18.04 bash
    2. root@35b863d7caf6:/# touch test
    3. root@35b863d7caf6:/# exit

    此时容器与原镜像就不一致了,可以用commit来提交一个新的镜像

    1. [root@openEuler-node1 ~]# docker commit -m "Add a new file" -a "FYS" 35b863d7caf6 test:0.1
    2. sha256:e2c7a68ee5c90d3ae55b095ca7dc8ee4a9ca1a54e9722d6ef4b98c68d1c5e4cf
    此时查看本地镜像列表, 会发现新创建的镜像已经存在了:
    1. [root@openEuler-node1 ~]# docker images
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. test 0.1 e2c7a68ee5c9 23 seconds ago 63.2MB

    2基于本地模板导入

    例如,下载了 ubuntu-18.04 的模板压缩包,之后使用以下命令导人即可:
    [root@openEuler-node1 ~]# cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:lB.04
    

    3基于Dockefile创建

    下面给出 Dockerfile 的一个简单示例,基于 debian:stretch-slim 镜像安装 Python 3
    环境,构成一个新的 python:3 镜像:
    1. [root@openEuler-node1 ~]# vim dockerfile
    2. FROM debian:stretch-slim
    3. LABEL version="1.0" maintainer "docker user "
    4. RUN apt-get update && \
    5. apt-get install-y python3 && \
    6. apt-get clean && \
    7. rm rf /var/lib/apt/lists/*
    8. [root@openEuler-node1 ~]# docker build -t python:3 .

    FROM:   基础镜像,当前新镜像是基于哪个镜像的
    MAINTAINER: 镜像维护者的姓名和邮箱地址
    RUN:    容器构建时需要运行的命令,如果在容器运行时需要运行其他命令,使用run指定
    EXPOSE: 容器对外暴露的端口,mysql:3306、redis:6379
    WORKDIR:创建容器后,进入容器使用pwd指令落脚点的目录,没有指定就是/,如centos是/,redis是/data
    ENV:    用来构建镜像的过程中设置环境变量,"ENV 键 值"。 相当于成员变量
             如:ENV MY_PATH /usr/mytest    这个环境变量可以在后续的任何RUN指令中使用;也可以在其它指令中直接使用这些环境变量,      
    ADD:    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包。 ADD = COPY+解压缩
    COPY:   类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置       
    VOLUME: 容器数据卷,用来数据保存和持久化工作
    CMD:    指定一个容器启动时需要运行的命令。DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
             也就是人工添加或文件中指定的CMD参数会把DockerFile里面的参数覆盖,只会有最后一个生效。

    .其中 使用 -f 命令可以指定dockerfile的路径。
     

    存出和载入镜像

    1存出镜像

    可以使用 docker [image] save 命令 该命令支持 -o output string 参数 导出镜像到指定的文件中

     

    1. [root@openEuler-node1 ~]# docker save -o ubuntu_18.04.tar ubuntu:18.04
    2. [root@openEuler-node1 ~]# ll
    3. 总用量 64012
    4. -rw-------. 1 root root 974 219 16:15 anaconda-ks.cfg
    5. -rw-r--r-- 1 root root 205 311 16:47 dockerfile
    6. -rw------- 1 root root 65539072 311 16:54 ubuntu_18.04.tar

     2载入镜像

    可以使用 docker [image] load 将导出的 tar 文件再导人到本 镜像库。-i  input string 选项,从指定文件中读入镜像内容,与存出相反
    1. [root@openEuler-node1 ~]# docker load < ubuntu_18.04.tar
    2. [root@openEuler-node1 ~]# docker load -i ubuntu_18.04.tar

     上传镜像

    可以使用 docker [image] push 命令上 传镜像到仓库,默认上传到 Dock er Hub 官方仓库(需要登录)
    命令格式为 docker [image] push [:TAG] I [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG:]
    [root@openEuler-node1 ~]# docker push user/test:latest
    
    第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本 地~ docker
    目录下
  • 相关阅读:
    Oracle 提示(hint)方法:use_nl
    Zookeeper应用场景
    如何实现不同MongoDB实例间的数据复制?
    C++标准库分析总结(九)——<适配器、istream_iterator、ostream_iterator、bind>
    【Springboot】微服务中使用腾讯云T-Sec天御对文本及图片内容进行安全检测
    java集合专题_集合体系介绍_集合遍历(1)
    基于 Netty + RXTX 的无协议 COM 通讯案例实现
    Spring Boot插件化开发概念原理及实现
    Splashtop 与 Canopy 携手共同增强对物联网设备的远程管理
    设计模式之代理模式
  • 原文地址:https://blog.csdn.net/2201_75878485/article/details/136535968