• Docker学习笔记(三)——容器提交&上传镜像


    一、简要

      之前的文章已经讲过镜像的下载、运行,和容器的基本操作,接下来这篇文章是讲容器的提交和上传镜像。

      打个比方:如果你想要你的容器进行备份或者分享给其他用户使用(服务器、其他用户等),那就得将当前容器复制一份然后发给其他用户;又或者说,你当前容器在本机部署了应用系统运行,然后测试没问题了,想将该容器的发布到服务器里运行,可以节省服务器和本机环境配置不相同的时间,那么这个过程在Docker里如何体现的呢?下面有4个步骤:

      1.我们可以在本机将运行后的容器提交(commit)到本地镜像仓库;

      2.然后将本地镜像上传(push)到DockerHub;

      3.服务器/其他用户机器,在DockerHub上下载镜像(pull)

      4.服务器/其他用户机器,将下载后的镜像运行;

    一、注册&登录DockerHub用户

     官网地址:https://hub.docker.com/

    1.注册

    点击上面官网地址,自行注册。

    2.登录

    在操作系统输入命令:docker login

    [root@hejl nginx]# docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: hejianliang
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    You have new mail in /var/spool/mail/root
    

    按照步骤输入用户名和密码。

    二、创建DockerHub镜像地址

    在官网登录DockerHub后,来到个人首页:

    点击"Create Repository"

    输入相应信息,点击"Create"即可。

    以下是我已经创建好的镜像仓库:

    Tags and Scans:表示仓库的标签/版本;

    Docker commands:表示仓库的上传(push)命令;

    三、实操-容器提交&上传镜像

    列出本地镜像列表(如果没有镜像,自行pull镜像):

    [root@hejl nginx]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    hejianliang/centos   java_nginx          7d33387c23ca        17 hours ago        765MB
    hejianliang/centos   <none>              f7dbccc37e60        9 days ago          686MB
    hejianliang/centos   v1                  4173d0975bbe        2 weeks ago         774MB
    centos               latest              0d120b6ccaa8        3 months ago        215MB

    列出本地容器列表(如没有容器,自行run镜像):

    [root@hejl nginx]# docker ps -a
    CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS                       PORTS               NAMES
    26dc75058b6e        hejianliang/centos:java_nginx   "/sbin/init"        17 hours ago        Exited (137) 4 minutes ago                       centos_java_nginx
    a8bde2ae13aa        hejianliang/centos:v1           "/bin/bash"         6 days ago          Exited (0) 6 days ago                            172.18.0.3
    

    接下来我要将容器 id为 "26dc75058b6e" 的容器,提交到镜像仓库,提交语法:

    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    OPTIONS说明:
    
    -a :提交的镜像作者;
    
    -c :使用Dockerfile指令来创建镜像;
    
    -m :提交时的说明文字;
    
    -p :在commit时,将容器暂停。
    

    提交命令:

    [root@hejl nginx]# docker commit -a "hejianliang" -m "整合Nginx、Tomcat、Keepalived服务" -p 26dc75058b6e hejianliang/centos:java_nginx_v2
    sha256:9549e4d937c82ab46193b3faabd3bf3f4cb6a46acd54f52199b8d2c0edc66842
    

    提交成功,docker images 查看本地镜像仓库:

    [root@hejl nginx]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED              SIZE
    hejianliang/centos   java_nginx_v2       9549e4d937c8        About a minute ago   801MB
    hejianliang/centos   java_nginx          7d33387c23ca        18 hours ago         765MB
    hejianliang/centos   <none>              f7dbccc37e60        9 days ago           686MB
    hejianliang/centos   v1                  4173d0975bbe        2 weeks ago          774MB
    centos               latest              0d120b6ccaa8        3 months ago         215MB
    

    镜像"hejianliang/centos:java_nginx_v2" 已提交成功了,容量大小是801MB,现在我们进行第二步上传镜像,上传语法:

    docker push [OPTIONS] NAME[:TAG]
    OPTIONS说明: --disable-content-trust :忽略镜像的校验,默认开启

    上传镜像命令:

    [root@hejl nginx]# docker push hejianliang/centos:java_nginx_v2
    The push refers to repository [docker.io/hejianliang/centos]
    3434a2f802c2: Pushed 
    076ecd3c326f: Layer already exists 
    291f6e44771a: Layer already exists 
    java_nginx_v2: digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d size: 954
    

    上传镜像成功。

    四、实操-镜像下载

    刚才已经把镜像上传到官网上了,现在我们可以切换到另外一台机器/本机(注:机器上需安装Docker并启动),将上传的镜像下载到机器上。

    我们可以从docker上查询刚才上传的镜像,命令:docker search hejianliang

    [root@localhost ~]# docker search hejianliang
    NAME                 DESCRIPTION         STARS               OFFICIAL            AUTOMATED
    hejianliang/centos   centos仓库            1                                       
    hejianliang/ubuntu                       0 
    

    仓库地址已搜索出来,接下来下载镜像:

    [root@localhost ~]# docker pull hejianliang/centos:java_nginx_v2
    java_nginx_v2: Pulling from hejianliang/centos
    3c72a8ed6814: Pull complete 
    0f414fdba906: Pull complete 
    a8a9d4720f65: Pull complete 
    Digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d
    Status: Downloaded newer image for hejianliang/centos:java_nginx_v2
    docker.io/hejianliang/centos:java_nginx_v2
    [root@localhost ~]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    hejianliang/centos   java_nginx_v2       9549e4d937c8        About an hour ago   801MB
    test/ubuntu          v1                  ed488aac8ae1        3 weeks ago         72.9MB
    <none>               <none>              9076a9ac1911        3 weeks ago         0B
    <none>               <none>              5a5fa4f0a2f9        3 weeks ago         0B
    <none>               <none>              03be7b389780        3 weeks ago         0B
    <none>               <none>              b74f768c6588        3 weeks ago         72.9MB
    rethinkdb            latest              fc02d4327225        4 weeks ago         131MB
    hejianliang/ubuntu   15.10               9140108b62dc        6 weeks ago         72.9MB
    ubuntu               latest              9140108b62dc        6 weeks ago         72.9MB
    hello-world          latest              bf756fb1ae65        10 months ago       13.3kB
    ubuntu               15.10               9b9cb95443b5        4 years ago         137MB
    training/webapp      latest              6fae60ef3446        5 years ago         349MB
    

    镜像下载后,我们通过查看镜像命令,我们的 "hejianliang/centos" 镜像也在本地仓库里了。

    下载过后的镜像,和平时一样运行,这里就不一一操作了,可以回顾作者之前的文章。

    五、总结

      个人认为Docker这种容器管理方式很便捷,就类似GitHub、MavenRepository等,使用起来很易上手,就是要记的命令多些;以往我没使用Docker之前,是用虚拟机进行系统部署测试,没问题再将系统部署上云服务器。但体验过两种方式过后(Docker和虚拟机),感觉Docker的效率更高,而且操作系统的环境也不用担心不一致的问题,还有虚拟机占用的空间及内存比较多,处理效率也没Docker高。这就是我使用这两种虚拟容器的感受。

  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/hejianliang/p/13962154.html
Copyright © 2020-2023  润新知