Docker学习之镜像操作

使用Docker镜像

以下都是Docker镜像的一系列重要名操作,包括获取、查看、搜索、删除、创建、存出或载入、上传等。可使用docker image help命令查看帮助。

1.获取镜像(pull)

  • 使用pull子命令下载镜像
    格式为: docker [image] pull NAME[:TAG],其中,NAME是镜像仓库名称,用以区分镜像,
    TAG是镜像的标签,往往用来表示版本信息,如果不显示指定TAG,则默认为latest标签,这会下载仓库中最新版本的镜像。

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

    $ docker pull centos
    sudo docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    a02a4930cb5d: Pull complete
    Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
    Status: Downloaded newer image for centos:latest

    镜像文件一般由若干层(layer)组成,每一层都对应一个唯一的id(完整的id包括256比特,64个十六进制字符组成)

    docker默认是从官方仓库下载镜像,官方的镜像注册服务器可省略。
    docker pull ubuntu:18.04命令相当于:
    docker pull registry.hub.docker.com/ubuntu:18.04

    如果从其他地址下载,需要填写镜像注册服务器地址,例如从网易蜂巢的镜像源来下载ubuntu18.04镜像:
    text docker pull hub.c.163.com/public/ubuntu:18.04

    pull子命令支持的选项主要包括:
    text -a, --all-tags=true|false: 是否获取镜像中的所有镜像,默认为否; --disable-content-trust: 取消镜像的内容校验,默认为真 --registry-mirror=proxy_url:指定镜像代理服务地址(如:https://registry.docker-cn.com)

    使用centos镜像创建一个容器,并在其中运行bash应用:

    $ docker run -it centos
    [root@5797962d59c1 /]# echo "Hello World"
    Hello World
    [root@5797962d59c1 /]#

2. 查看镜像(images & tag & inspect & history)

使用Docker镜像的images、tag、inspect和history子命令。

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

    $ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              1e1148e4cc2c        3 months ago        202MB

    各字段详细描述如下:
    REPOSITORY:来源于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像
    TAG:镜像的标签信息,比如18.04、latest表示不同的版本信息
    IMAGE ID:镜像ID(唯一标识镜像),如果两个镜像的ID相同,则它们指向同一个镜像,只是具有不同标签名。
    CREATE:创建时间,说明镜像最后的最新时间
    SIZE:镜像大小

  • 使用tag命令添加镜像标签
    $ sudo docker tag centos:latest mycentos:latest
    $ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              1e1148e4cc2c        3 months ago        202MB
    mycentos            latest              1e1148e4cc2c        3 months ago        202MB  
  • 使用inspect命令查看详细信息
    使用docker [image] inspect 命令可以获取该镜像的详细信息,包括作者、适应架构、各层的数字摘要等。

    $ sudo docker inspect centos
    [
        {
            "Id": "sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb",
            "RepoTags": [
                "centos:latest"
            ],
            "RepoDigests": [
                "centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426"
            ],
            "Parent": "",
            "Comment": "",
            "Created": "2018-12-06T00:21:07.135655444Z",
            "Container": "1fdbb0fcc184eb795364f7aa5fdc00299d0a2b90d8e26b4696217c22da7f983f",
            "ContainerConfig": {
                ...
            },
            "DockerVersion": "17.06.2-ce",
            "Author": "",
            "Config": {
                ...
            },
            "Architecture": "amd64",
            "Os": "linux",
            "Size": 201779604,
            "VirtualSize": 201779604,
            "GraphDriver": {
                "Data": {
                    "MergedDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/merged",
                    "UpperDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/diff",
                    "WorkDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/work"
                },
                "Name": "overlay2"
            },
            "RootFS": {
                "Type": "layers",
                "Layers": [
                    "sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956"
                ]
            },
            "Metadata": {
                "LastTagTime": "0001-01-01T00:00:00Z"
            }
        }
    ]

    docker [image] inspect centos返回的是一个JSON格式的消息,如果只需要其中一项内容时,可以使用-f子命令指定,
    例如,获取镜像的Architecture:

    $ docker [image] inspect -f {{.Architecture}} centos
    amd64
  • 使用history命令查看镜像历史
    history子命令,可以查看镜像各层的创建信息

    $ docker history centos
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    e1148e4cc2c         3 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
    <\missing>          3 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
    <\missing>          3 months ago        /bin/sh -c #(nop) ADD file:6f877549795f4798a…   202MB

    可使用history子命令--no-trunc查看被截短的命令

3. 搜寻镜像(search)

  • 使用search子命令搜索镜像
    语法为:docker search [option] keyword。支持的命令选项可以通过docker search "-" + "TAB"提示补充。

    $ docker search [option] keyword

4. 删除和清理镜像(rmi & rm)

  • 使用标签删除镜像
    使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID

    $ docker rmi IMAGE [IMAGE...]
    $ docker image rm label IMAGE [IMAGE...]
    
    支持的选项有:
    -f, -force: 强制删除镜像,即使有容器依赖它
    -no-prune:  不要清理未带标签的父镜像

    当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。
    当镜像只剩下一个标签的时候,docker rmi命令会删除这个镜像文件的所有文件层

  • 使用镜像ID来删除镜像
    先使用docker rm id删除容器,然后再使用docker rmi id删除镜像。

    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    210a3d3375d4        ubuntu:18.04        "/bin/bash"         7 seconds ago       Exited (0) 3 seconds ago                       brave_bardeen
    
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              18.04               47b19964fb50        4 weeks ago         88.1MB
    
    $ docker rm 210a3d3375d4
    210a3d3375d4
    
    $ docker rmi 47b19964fb50
    Untagged: ubuntu:18.04
    Untagged: ubuntu@sha256:7a47ccc3bbe8a451b500d2b53104868b46d60ee8f5b35a24b41a86077c650210
    Deleted: sha256:47b19964fb500f3158ae57f20d16d8784cc4af37c52c49d3b4f5bc5eede49541
    Deleted: sha256:d4c69838355b876cd3eb0d92b4ef27b1839f5b094a4eb1ad2a1d747dd5d6088f
    Deleted: sha256:1c29a32189d8f2738d0d99378dc0912c9f9d289b52fb698bdd6c1c8cd7a33727
    Deleted: sha256:d801a12f6af7beff367268f99607376584d8b2da656dcd8656973b7ad9779ab4
    Deleted: sha256:bebe7ce6215aee349bee5d67222abeb5c5a834bbeaa2f2f5d05363d9fd68db41

    当有容器运行时,使用docker -rmi id删除容器是无法成功的,如果想强制删除使用-f参数。一般推荐使用以上方法,
    先删除镜像对应的所有容器,然后再删除镜像。

  • 清除镜像
    使用Docker一段时间后,系统中可异能遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过命令清理:

    docker image prune
    
    支持的选项有:
    -a, -all:删除所有无用镜像,不光是临时镜像;
    -filter filter:只清理复合给定过滤器的镜像;
    -f, -force:强制删除镜像,而不进行提示确认;

5. 创建镜像(commit & import & Dockerfile)

创建镜像的方法有三种:基于已有的容器创建、基于本地模板导入、基于Dockerfile创建

  • 基于已有容器创建(commit子命令)

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

    命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    支持选项:
    -a, --author="": 作者信息;
    -c, --change=[]: 提交的时候执行Dokerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等
    -m, --message="": 提交消息;
    -p, --pause=true: 提交时暂停容器运行
    
    实例如下:
    $ docker run -it ubuntu:18.04 /bin/bash
    root@25b742d78f24:/# touch test
    root@25b742d78f24:/# exit

    当前容器相比于原ubuntu:18.04镜像,已经发生了改变,可以使用docker commit命令来提交为一个新的镜像。

    $ docker [container] commit -m "Added a new file" -a "thekernel@163.com"  25b742d78f24:1.0.0
    sha256:59fc18f43457af8ba1084094f1c7b33edb7a0d263409fb0912ba280fdd1a30ca
    
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test                1.0.0               59fc18f43457        17 seconds ago      88.1MB
    ubuntu              18.04               47b19964fb50        4 weeks ago         88.1MB
    ubuntu              latest              47b19964fb50        4 weeks ago         88.1MB
  • 基于本地模板导入(import子命令)
    可以直接从一个操作系统模板文件导入一个镜像,使用docker import命令,

    命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

    要直接导人一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像模板来创建 。
    OPENVZ 模板的下载地址为 http://openvz.org/Download/templates/precreated。

    例如,下载了 ubuntu-18.04 的模板压缩包,之后使用以下命令导人即可:

    $ cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04

    然后查看新导入的镜像,已经在本地存在了:

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              18.04               47b19964fb50        4 weeks ago         88.1MB
  • 基于Dockerfile创建
    基于Dockerfile创建是常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
    见其他章节详解。

6. 存出和载入镜像(save & load)

Docker镜像的save和load命令。

  • 存出镜像
    如果要导出镜像到本地文件,可以使用docker [image] save命令,支持 -o、-output string参数,导出镜像到指定的文件中。

    导出本地的ubuntu:18.04镜像到文件ubuntu_18.04.tar:
    ```text
    $ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    test 1.0.0 59fc18f43457 3 hours ago 88.1MB
    ubuntu 18.04 47b19964fb50 4 weeks ago 88.1MB
    ubuntu latest 47b19964fb50 4 weeks ago 88.1MB

    $ docker save -o ubuntu_18.04.tar ubuntu:18.04
    ```

    至此,可以将ubuntu_18.04.tar分享给别人。

  • 载入镜像
    可以使用docker [image] load将导出的tar文件再导入到本地镜像库。支持-i、-input string选项,从指定文件中读入镜像内容。

    例如,从文件ubuntu_18.04.tar导入镜像到本地镜像列表,如下所示:

    $ docker load -i ubuntu_18.04.tar
    或者
    $ docker load < ubuntu_18.04.tar

    这将导入镜像及其相关的元数据信息(包括标签等)。导入成功后,可以使用docker images命令进行查看,与原镜像一致。

7. 上传镜像(push)

  • 上传镜像
    可以使用docker [image] push 命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。

    命令格式:docker [image] push NAME[:TAG],或者上传到非官方仓库
             docker [image] push [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]        
    
    例如:用户user上传本地的test:latest镜像,可以先添加新的标签user/test:latest,然后用docker [image] push命令上传镜像:
    $ docker tag test:latest user/test:latest
    $ docker push user/test:latest

    第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/.docker目录下

原文地址:https://www.cnblogs.com/wayne666/p/10531834.html

时间: 2024-07-31 08:56:34

Docker学习之镜像操作的相关文章

Docker 学习之镜像导入导出及推送阿里云服务器(三)

在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像文件导入导出 1.1 查看当前已有的镜像文件 docker images 1.2 随意运行一个容器 docker run -d -p 8080:8080 --name tomcat tomcat 1.3 通过容器来的到一个新的镜像 # 根据正在运行的容器创建一个新的镜像docker commit t

Docker学习笔记——镜像、容器、仓库

Docker三个基本概念 镜像(image) 容器(container) 仓库(Repository) 镜像(image) 搜索镜像 docker search nginx 获取镜像 docker pull nginx 指定Registry地址和具体的仓库名下载镜像,没有指定Registry地址,默认从Docker Hub上下载 docker pull jwilder/nginx-proxy 查看镜像 docker images  REPOSITORY          TAG         

Docker学习之镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像. 获取镜像 # docker pull ubuntu:16.04 运行 # docker run -it ubuntu:16.04 bash -i 交互式操作 -t 建立终端 bash 进入交互式shell [email protected]:/# id uid=0(root) gid=0(root) groups=0(root) [email protected]:/# cat /etc

Docker学习04_镜像管理

运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 可以在浏览器中访问 https://hub.docker.com/search?q=&type=image 来搜索和查看官方镜像仓库. 使用 docker images 列出本地镜像: 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如果不指定一个镜像的版本标签,docker 将默认使用 最新版本即”仓库源名称:latest” 镜像. 执行

docker学习-构建镜像

对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库.中间件.应用软件等都有现成的docker官方镜像或其他人和组织创建的镜像,我们只需要稍微配置就可以直接使用.但是在某些情况下,也需要自己构建镜像.比如:1.找不到现成的镜像,比如自己开发应用程序2.需要在镜像中加入特定的功能.docker提供了两种构建镜像的方法:docker commit命令和Dockerfile构建文件. docker commit docker commit命令式创建镜像最直观的方法,其过程包

【Docker】docker 的常用命令&amp;操作

一.在linux虚拟机上安装docker XShell1:检查内核版本,必须是3.10及以上 uname -r2:安装docker yum install docker3:输入y确认安装4:启动docker [[email protected] ~]# systemctl start docker [[email protected] ~]# docker -v Docker version 19.03.2, build 6a30dfc5:开机启动docker [[email protected

Docker学习(二)docker镜像操作

上一篇:docker学习(一)在centos7上安装docker 列出所有docker镜像 docker images 拉取镜像 docker pull 镜像名 我这里一Tomact为例 首先在Docker Hub上查找tomcat镜像 搜索tomcat选择收藏和拉取最多的那个,一般就是第一个,然后点击进去通过命令进行拉取 拉取镜像,默认tag: latest最新版本 等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为tomcat的镜像. [[email protected]

Docker学习笔记(2)-docker镜像操作

本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签],具体可通过docker pull --help命令查看. Docker镜像仓库地址的格式一般为<域名/IP>[:端口号],仓库名一般为两段式名称,即<用户名>/<软件名>,对于Docker Hub,默认的用户名为library

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被