zoukankan      html  css  js  c++  java
  • docker镜像管理(二)

    docker镜像

    docker镜像含有启动容器所需要的文件系统和内容,因此,其用于创建并启动docker容器

    docker镜像采用分层构建机制,最底层为bootfs,其之为rootfs

    • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节省内存资源
    • rootfs:位于rootfs上,表现为docker容器的根文件系统

        传统模式中,系统启动时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为只读模式

        docker中,rootfs由内核挂在为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层

     Docker Image Layer

    位于下层的镜像称为父镜像(parent image),最底层的称之为基础镜像(Base Image)

    最上层为“读写”层,其下层为“只读”层

     

     想要联合挂载需要特定的文件系统Aufs

    Aufs

    advance multi-layered unification filesystem:高级多层统一文件系统

    • 用于为linux文件系统实现“联合挂载”
    • aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发
    • Docker最初使用aufs作为容器文件系统层,它目前仍作为存储后端之一来支持
    • aufs的竞争产品是overlayfs,后者后者自从3.18版本开始被合并到了linux内核
    • docker的分层镜像,除了aufs,docker还支持btrfs,devicemapper和vfs等

        在Ubuntu系统下,默认文件系统为aufs,而在CentOS7上,用的是devicemapper

    Docker Registry

    启动容器时,docker daemon会试图从本地获取相关镜像,本地镜像不存在时,将从Registry中下载该镜像保存至本地中

     镜像相关操作

    镜像的生成途径

    • dockerfile
    • 基于容器制作
    • docker hub automated builds

     

     基于容器制作镜像

    Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    Create a new image from a container's changes
    
    Options:
      -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
      -c, --change list      Apply Dockerfile instruction to the created image
      -m, --message string   Commit message
      -p, --pause            Pause container during commit (default true)

    制作镜像案例:

    [root@localhost ~]# docker commit -p -a "liwang" -m "myimage" mybox 
    sha256:de701b01b33656a3c1e04bce397940fc7675dca4e08e60ca19425900a258274d
    
    [root@localhost ~]# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              de701b01b336        3 seconds ago       1.22MB
    busybox             latest              020584afccce        3 weeks ago         1.22MB

    修改标签案例:

    [root@localhost ~]# docker tag de701b01b336 liwang/busybox:v1 
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    liwang/busybox      v1                  de701b01b336        2 minutes ago       1.22MB
    busybox             latest              020584afccce        3 weeks ago         1.22MB

    删除镜像(如果一个镜像有2个标签,其实是删除标签)

    [root@localhost ~]# docker image rm liwang/busybox:v1 
    Untagged: liwang/busybox:v1
    Deleted: sha256:de701b01b33656a3c1e04bce397940fc7675dca4e08e60ca19425900a258274d
    Deleted: sha256:ecb7306b32fefb8a2c964a217506696a7f41f7085fe317f7416db74a066f284e
    [root@localhost ~]# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              020584afccce        3 weeks ago         1.22MB

    修改镜像初始运行的命令

    [root@localhost ~]# docker commit -a "liwang<liwang_dc@126.com>" -p -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' mybox liwang/httpd:v1            
    sha256:02a490f7eb0d771125f9f8a29c9ae8973862c27f7ac2481c8c19f3aa73a55506

    [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ddb70a657548 liwang/busybox:v1 "sh" 7 minutes ago Up 7 minutes mybox
    [root@localhost
    ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ddb70a657548 liwang/busybox:v1 "sh" 7 minutes ago Up 7 minutes mybox
    [root@localhost
    ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE liwang/httpd v1 02a490f7eb0d About a minute ago 1.22MB liwang/busybox v1 6592e65bbc7f 27 minutes ago 1.22MB nginx latest 231d40e811cd 12 hours ago 126MB busybox latest 020584afccce 3 weeks ago 1.22MB

     [root@localhost ~]# docker run --name myhttpd -itd liwang/httpd:v1
     9bbc0271904b9f41150911f2a11117943a7cd44c8e531b76d3f699a970411210

     [root@localhost ~]# curl 172.17.0.2
     <h1>this is busybox page</h1>

    docker hub 

    上传至docker hub,这里要注意的是本地镜像标签一定要和docker hub上自己的私有仓库名字一致

    登录docker hub 创建自己的仓库

     填写仓库名称和描述信息,并且选择是公有仓库还是私有仓库

    然后把镜像上传至docker hub上

    [root@localhost ~]# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    liwang/httpd        v1                  02a490f7eb0d        37 minutes ago      1.22MB
    lizhaoqwe/httpd     v1                  02a490f7eb0d        37 minutes ago      1.22MB
    liwang/busybox      v1                  6592e65bbc7f        About an hour ago   1.22MB
    nginx               latest              231d40e811cd        12 hours ago        126MB
    busybox             latest              020584afccce        3 weeks ago         1.22MB

     [root@localhost ~]# docker login -u lizhaoqwe
     Password:

    
    [root@localhost ~]# docker push lizhaoqwe/httpd:v1
    The push refers to repository [docker.io/lizhaoqwe/httpd]
    69bc3e032fd9: Pushed 
    68eb0185b393: Pushed 
    1da8e4c8d307: Pushed 
    v1: digest: sha256:593871c722b58b0d8a45978e159896737fa8b91de5cbaffecfdf4379c3598243 size: 941

    上传完毕后查看docker hub

    基于阿里云的镜像仓库

     

     点击管理可以看到阿里云镜像仓库的用法

     现在我们就把刚才基于busybox创建的httpd镜像上传至阿里云镜像仓库

    [root@localhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/liwang123/httpd
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/liwang123/httpd]
    69bc3e032fd9: Pushed 
    68eb0185b393: Pushed 
    1da8e4c8d307: Pushed 
    v1: digest: sha256:593871c722b58b0d8a45978e159896737fa8b91de5cbaffecfdf4379c3598243 size: 941

    验证

    镜像打包

    镜像的导入导出

    如果我们的镜像,别人也想用,但只想用一次就删除掉,那么我们要先打标签在上传,然后测试人员还要pull下来,其实也比较麻烦,那么这个时候我们可以考虑用镜像打包的方式,镜像打包可以把所需要的镜像打包在一起,然后可以用scp等命令拷贝过去,在导入就可以了

    打包镜像

    [root@localhost ~]# docker images 
    REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
    liwang/httpd                                        v1                  02a490f7eb0d        2 hours ago         1.22MB
    liwang123/httpd                                     v1                  02a490f7eb0d        2 hours ago         1.22MB
    lizhaoqwe/httpd                                     v1                  02a490f7eb0d        2 hours ago         1.22MB
    registry.cn-hangzhou.aliyuncs.com/liwang123/httpd   v1                  02a490f7eb0d        2 hours ago         1.22MB
    liwang/busybox                                      v1                  6592e65bbc7f        2 hours ago         1.22MB
    nginx                                               latest              231d40e811cd        14 hours ago        126MB
    busybox                                             latest              020584afccce        3 weeks ago         1.22MB
    [root@localhost ~]# docker save -o myimages.tar.gz registry.cn-hangzhou.aliyuncs.com/liwang123/httpd nginx busybox
    [root@localhost ~]# ls -ltr 
    总用量 150624
    -rw-r--r--   1 root root  22580749 7月  17 2017 Python-3.6.2.tgz
    -rw-------.  1 root root      1257 5月  28 08:18 anaconda-ks.cfg
    drwxr-xr-x.  5 root root       272 6月  16 23:03 old
    drwxr-xr-x.  5 root root       240 6月  16 23:31 inc1
    drwxr-xr-x.  5 root root       235 6月  16 23:31 fullbackup
    drwxr-xr-x  17 root root      4096 6月  18 15:11 Python-3.6.2
    -rw-r--r--   1 root root       102 6月  18 21:42 test.yaml
    -rw-r--r--   1 root root        15 6月  18 21:42 test.retry
    -rw-------   1 root root 131637760 11月 23 22:44 myimages.tar.gz

    在另一台机器上执行导入命令并验证

    [root@localhost ~]# docker load -i myimages.tar.gz 
    1da8e4c8d307: Loading layer [==================================================>]  1.437MB/1.437MB
    68eb0185b393: Loading layer [==================================================>]   5.12kB/5.12kB
    69bc3e032fd9: Loading layer [==================================================>]   2.56kB/2.56kB
    Loaded image: registry.cn-hangzhou.aliyuncs.com/liwang123/httpd:v1
    831c5620387f: Loading layer [==================================================>]  72.48MB/72.48MB
    5fb987d2e54d: Loading layer [==================================================>]  57.67MB/57.67MB
    4fc1aa8003a3: Loading layer [==================================================>]  3.584kB/3.584kB
    Loaded image: nginx:latest
    Loaded image: busybox:latest
    [root@localhost
    ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.cn-hangzhou.aliyuncs.com/liwang123/httpd v1 02a490f7eb0d 2 hours ago 1.22MB nginx latest 231d40e811cd 14 hours ago 126MB busybox latest 020584afccce 3 weeks ago 1.22MB
  • 相关阅读:
    Linux | Ubuntu 生成二维码实例
    Ubuntu 添加wine安装程序的快捷方式
    mysql 中文 排序
    Received disconnect from **.**).***.*** port 22:2: Too many authentication failures 解决办法
    php 数组与URL相互转换
    ssh `快捷键` 快速链接服务器
    使用ssh生成密钥并保存在不同的文件(ubuntu)
    H5移动端调试 weinre
    简单的 图片下载 php
    linux 系统生成二维码
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/11914940.html
Copyright © 2011-2022 走看看