• 制作Docker镜像的两种方式


    此文已由作者朱笑天授权网易云社区发布。

    欢迎访问网易云社区,了解更多网易技术产品运营经验。


    一、使用docker commit命令制作docker镜像

    1. pull一个centos6.6的基础镜像,并运行一个docker container,然后在其中进行定制化(安装、配置服务等);

    [root@localhost ~]# docker pull centos:6.6           
    Pulling repository centos            
    8b44529354f3: Download complete             
    f1b10cd84249: Download complete             
    Status: Downloaded newer image for centos:6.6                    
    [root@localhost ~]# docker images            
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE            
    centos              6.6                 8b44529354f3        4 days ago          202.6 MB            
    centos              centos6.6           8b44529354f3        4 days ago          202.6 MB            
    [root@localhost ~]# docker run -i -t centos:6.6 bash            
    [root@b42c1ba929a9 /]# ls            
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var            
    [root@b42c1ba929a9 /]# mkdir /tmp/test.txt            
    [root@b42c1ba929a9 /]# exit            
    exit

    接下来,查看一下container的改动:

    [root@localhost ~]# docker ps -a           
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES            
    b42c1ba929a9        centos:6.6          "bash"              About a minute ago   Exited (0) 22 seconds ago                       berserk_mcclintock   
    804a56ce8008        f1b10cd84249        "/bin/echo hello"   22 minutes ago                                                       test                 
    [root@localhost ~]# docker diff b42c1ba929a9            
    C /tmp            
    A /tmp/test.txt            
    C /root            
    A /root/.bash_history

    2. 执行docker commit命令创建一个镜像:

    [root@localhost ~]# docker commit -m "new container" b42c1ba929a9 yuanhuan/newcontainer1           
    07b146e0be9e98c253122784c3837dd1604f7692e794f3601dad747d41901cd4            
    [root@localhost ~]# docker images            
    REPOSITORY               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE            
    yuanhuan/newcontainer1   latest              07b146e0be9e        43 seconds ago      202.6 MB            
    centos                   6.6                 8b44529354f3        4 days ago          202.6 MB            
    centos                   centos6.6           8b44529354f3        4 days ago          202.6 MB

    3. 登录docker,并将该镜像push到docker仓库:

    [root@localhost ~]# docker login           
    Username: yuanhuan            
    Password:             
    Email: yuanhuan_2005@126.com            
    Login Succeeded            
    [root@localhost ~]# docker push yuanhuan/newcontainer1            
    The push refers to a repository [yuanhuan/newcontainer1] (len: 1)            
    Sending image list            
    Pushing repository yuanhuan/newcontainer1 (1 tags)            
    f1b10cd84249: Image already pushed, skipping             
    8b44529354f3: Image already pushed, skipping             
    07b146e0be9e: Image successfully pushed             
    Pushing tag for rev [07b146e0be9e] on {https://cdn-registry-1.docker.io/v1/repositories/yuanhuan/newcontainer1/tags/latest}

    成功之后,就可以登录docker页面,查看到刚刚制作的镜像了。

    image

    二、使用dockerfile制作镜像

    创建dockerfile文件:dockerfile.txt,内容如下:

    FROM centos           
    MAINTAINER YH, http://yuanhuan.blog.51cto.com            
    RUN yum install passwd openssl openssh-server -y            
    RUN echo '123456' | passwd --stdin root            
    RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''            
    RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''            
    RUN sed -i '/^sessions+requireds+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd            
    RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh            
    EXPOSE 22            
    CMD ip addr ls eth0 | awk '{print $2}' | egrep -o '([0-9]+.){3}[0-9]+';/usr/sbin/sshd -D

    简要说明:该dockerfile的主要目的是开启sshd服务,以便可以ssh登录,并且设置了root用户的密码。

    然后执行下面的命令制作一个镜像:

    docker build -t centos:autosshd - < dockerfile.txt

    成功之后就可以用docker images查看镜像列表了。


    两种方式比较:


    使用commit命令比较简单,相当于docker根据container内部执行的命令自动生成了dockerfile,并进行了build,比较适合对dockerfile不熟悉的用户;

    而dockerfile的方式显得稍有点复杂,但是比较适合批量处理的场景。dockerfile一次写入,多次运行。


    网易云容器服务为用户提供了无服务器容器,让企业能够快速部署业务,轻松运维服务。容器服务支持弹性伸缩、垂直扩容、灰度升级、服务发现、服务编排、错误恢复及性能监测等功能。点击可免费试用


    免费体验云安全(易盾)内容安全、验证码等服务

    更多网易技术、产品、运营经验分享请点击




    相关文章:
    【推荐】 Jmeter入门实例

  • 相关阅读:
    Vue项目和微信小程序项目的区别与比较
    在Vue中应该如何封装Axios 管理API接口
    Vue2.x 项目踩坑笔记
    微信小程序日常踩坑笔记
    面试题之JavaScript 请写一个深度克隆的函数
    面试题之JavaScript 请编写实现一个对js类型检测函数(支持检测基本类型,对象,函数,正则,时间等)
    面试题之 HTML && CSS && JavaScript 总结
    面试题之JavaScript 有一个url 'http://www.youdao.com/newcard.html?sid=50&a=5&add=9&type=all',请写一个获取url中'?'后制定参数值的函数
    面试题之JavaScript 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
    面试题之JavaScript 正则相关题
  • 原文地址:https://www.cnblogs.com/163yun/p/9883237.html
Copyright © 2020-2023  润新知