zoukankan      html  css  js  c++  java
  • Docker

    一:镜像简介

    镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等

    通过镜像可以创建一个或多个容器

    二:镜像管理

    1.获取镜像

    镜像是运行容器的模板,官方 Docker Hub 仓库已经提供了许多镜像共开发者使用

    如果我们需要获取某 个镜像则可以去 docker 仓库下载所需的镜像

    官方镜像仓库

    https://hub.docker.com/

    语法

    docker pull [仓库的URl]/[名称空间]/[仓库名称]:[版本号]
    

    默认使用官方仓库

    # 例如:安装redis的命令docker pull redis(下面是它完整的)
    docker pull docker.io/library/redis:latest
    

    实例

    docker pull redis
    

    2.查看已下载的镜像列表

    语法

    docker images
    docker image ls
    

    选项

    选项 释义
    -a 列出所有(包括临时文件)镜像文件
    -q 仅显示镜像 ID
    列出镜像的数字摘要值

    显示的参数

    名称 释义
    REPOSITORY 镜像仓库中的镜像名称
    TAG 镜像版本
    IMAGE ID 镜像ID(不完整,其余隐藏了)
    CREATED 镜像创建日期(多久之前创建)
    SIZE 镜像大小

    其中镜像的 ID 信息十分重要,它唯一标识了镜像(全球唯一)

    在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID

    TAG 信息用于标记来自同一个仓库的不同镜像

    TAG 在同一个仓库中是唯一的

    镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和

    3.为镜像添加标签

    为了方便后续工作中使用特定的镜像,还可以使用 docker tag 命令来为本地的镜像添加标签

    语法

    docker tag [原镜像ID] [新的名称]:[新的版本号]
    docker tag [原镜像名称]:[版本号] [新的名称]:[新的版本号]
    docker tag [原镜像仓库URL]/[原命名空间]/[原仓库名称]:[版本号] [新的名称]:[新的版本号]
    

    实例

    docker tag redis:latest redis:latest1
    

    这只会添加标签,并不能修改,并且添加的标签和原镜像名的ID相同

    4.登录

    docker login [选项] [仓库URL] 
    docker login --username=用户名 [仓库URL] 
    cd /etc/docker
    

    5.推送命令

    # 先给镜像打标签
    docker tag [镜像ID] [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
    
    # 推送
    docker push [完整的仓库名称/镜像名称]
    docker push [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
    

    6.查看镜像详情信息

    使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等

    docker inspect [选项] [镜像ID]
    docker inspect [选项] [镜像名称]:[版本号]
    
    
    # 筛选某一个需要的部分
    docker inspect -f '{{.Id}}'  74d107221092	# 获取ID
    docker inspect -f '{{.Config.Hostname}}'  74d107221092	# 获取配置主机名
    docker inspect -f '{{ .ContainerConfig.Hostname }}'   74d107221092	# 获取容器配置主机名
    

    7.查看历史记录

    语法

    docker history [镜像名称]
    docker history [镜像ID]
    

    实例

    docker history redis
    docker history 560f3f47e448
    
    
    [root@localhost ~]# docker history nginx
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    bc9a0695f571        6 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
    <missing>           6 days ago          /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
    <missing>           6 days ago          /bin/sh -c #(nop)  EXPOSE 80                    0B
    <missing>           6 days ago          /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
    <missing>           6 days ago          /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB
    <missing>           6 days ago          /bin/sh -c #(nop) COPY file:08ae525f517706a5…   1.95kB
    <missing>           6 days ago          /bin/sh -c #(nop) COPY file:e7e183879c35719c…   1.2kB
    <missing>           6 days ago          /bin/sh -c set -x     && addgroup --system -…   63.6MB
    <missing>           6 days ago          /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
    <missing>           6 days ago          /bin/sh -c #(nop)  ENV NJS_VERSION=0.4.4        0B
    <missing>           6 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.5     0B
    <missing>           12 days ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
    <missing>           13 days ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
    <missing>           13 days ago         /bin/sh -c #(nop) ADD file:d2abb0e4e7ac17737…   69.2MB
    

    8.搜索镜像

    在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像

    语法

    docker search [选项] [镜像名称/简介]
    

    选项

    选项 释义
    --limit n 只显示n条记录
    -f 过滤查询
    --no-trunc 不截断参数查询(显示全部信息)

    实例

    # 查询redis
    docker search redis
    
    # 只查询出前3条记录
    docker search redis --limit 3
    
    
    --limit 3	# 只显示前3条
    
    
    # 查询收藏数大于150的
    docker search redis -f stars=150
    
    
    # 查询官方的redis
    docker search redis is-official=true
    

    查询结果参数

    参数 释义
    NAME 镜像名称
    DESCRIPTION 镜像描述
    STARS 镜像收藏个数(类似于Github中的stars)
    OFFICIAL 是否是官方构建的镜像
    AUTOMATED 是否是自构建的镜像

    9.删除镜像

    使用 docker rmi 或 docker image rm 命令可以删除镜像

    语法

    docker rmi [镜像ID]
    docker rmi [镜像名称]:[版本号]
    

    选项

    选项 释义
    -f 强制执行

    实例

    # 删除redis镜像
    docker rmi 74d107221092
    docker rmi redis
    
    # 删除所有镜像
    docker rmo $(docker images -q)
    

    10.清理镜像

    使用一段时间之后,docker 会产生很多临时文件,以及一些没有被使用的镜像,我们可以通过 docker image prune 命令来进行清理

    语法

    docker image prune [选项]
    

    选项

    选项 释义
    -a 清理所有(未被使用的)镜像
    -f 强制执行

    实例

    # 删除所有的未被使用的镜像
    docker image prune -a
    
    
    # 强制删除所有的未被使用的镜像(不进行提示)
    docker image prune -a -f
    

    11.提交镜像

    语法

    docker commit [容器ID] [选项] [新的版本号]
    docker commit -a "作者" -m "简介" 容器ID
    

    选项

    选项 释义
    -a 作者
    -m 简介
    -p 保存时,容器停止运行

    实例

    docker commit -a "darker" -m "简介" 容器ID
    

    12.保存镜像

    export - 将容器导出为镜像包(仅仅保存了镜像)

    docker export [容器ID|容器名称] > xxx.tar
    
    # 实例:将nginx容器导出为nginx.tar镜像压缩包
    docker export nginx > nginx.tar
    

    import - 将镜像包导入为镜像

    docker import [压缩包名称] [镜像名称(自定义)]
    
    # 实例:将nginx.tar镜像压缩包导入为nginx镜像
    docker import nginx.tar test/nginx:v1
    
    • commit是导出为镜像
    • export是导出为镜像包(压缩包)

    save - 导出镜像为镜像压缩包(不仅保存了镜像,还保存了名称)

    选项 释义
    -o 指定在1个压缩包内导入多个镜像
    docker save [镜像ID|镜像名称] > [镜像压缩包名称]
    
    # 实例
    docker save test/nginx:v2 > nginx_v2.tar
    
    
    # 将多个镜像打包到1个压缩包中
    docker save -o test_2.tar nginx:1.19.2 redis python
    

    load - 将压缩包导入为镜像

    选项 释义
    -i 指定导出压缩包内的镜像
    docker load < [镜像压缩包]
    docker load -i < [镜像压缩包]
    
    # 实例:
    docker load < nginx.tar
    docker load -i test_2.tar
    
    导出方式 保存的完整性 保存体积 镜像重命名 保存的数量
    save与load 保存完整 否(镜像名是原来的) 可以保存多个镜像
    export与import 仅保存了镜像 是(镜像名可以自定义) 只能保存1个容器

    save 和 export 的使用场景

    • 打包镜像一般使用save,打包容器一般使用export
    • 需要构建历史信息的,可以使用save

    实例

    # 查看所有镜像
    [root@localhost blog]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              bc9a0695f571        7 days ago          133MB
    mysql               5.7.32              ae0658fdbad5        11 days ago         449MB
    centos              latest              0d120b6ccaa8        3 months ago        215MB
    python              3.6.8               48c06762acf0        18 months ago       924MB
    
    
    # 把 nginx:latest 打包成 nginx_save.tar
    [root@localhost blog]# docker save nginx:latest > nginx_save.tar
    
    
    # 把 nginx:latest centos:latest 打包成 all1_save.tar
    [root@localhost blog]# docker save -o all1_save.tar nginx:latest centos:latest
    
    
    # 将 all1_save.tar 导入成 nginx:v1
    [root@localhost blog]# docker import all1_save.tar nginx:v1
    sha256:95195f2f5ee8c32d997b78c8f15009f66fcfd8544ca394e4c09fe28397ba11f0
    
    
    # 查看所有镜像
    [root@localhost blog]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               v1                  95195f2f5ee8        6 seconds ago       359MB
    nginx               latest              bc9a0695f571        7 days ago          133MB
    mysql               5.7.32              ae0658fdbad5        11 days ago         449MB
    centos              latest              0d120b6ccaa8        3 months ago        215MB
    python              3.6.8               48c06762acf0        18 months ago       924MB
    
    
    # 运行导入的镜像(会报错)
    [root@localhost blog]# docker run -d -p 80:80 --name all_saved nginx:v1
    docker: Error response from daemon: No command specified.
    See 'docker run --help'.
    

    export 保存的镜像压缩包 只能由import导入

    save 保存的镜像压缩包 只能由load导入

    13.配置镜像加速器

    配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像(docker pull)的过程会很慢,甚至有可能无法下载镜像

    针对Docker客户端版本大于 1.10.0 的用户

    可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    
    {
      "registry-mirrors": ["https://rxsa4cyh.mirror.aliyuncs.com"]
    }
    
    EOF
    
    systemctl daemon-reload
    systemctl restart docker
    

    14.总结

  • 相关阅读:
    关于Cocos2d-x开发一个游戏的过程自述
    关于JDK环境变量的配置问题
    lnmp、lamp、lnmpa一键安装包(Updated: 2015-10-25)
    成大事者必备的九种能力、九种手段、九种心态
    燕十八mysql笔记
    cmake 安装 mysql5.5 版本
    IOS 中微信 网页授权报 key[也就是code]失效 解决办法
    js 复制 功能
    php 二维数组排序
    php获取前一天,前一个月,前一年的时间
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/14157069.html
Copyright © 2011-2022 走看看