zoukankan      html  css  js  c++  java
  • 制作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入门实例

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/163yun/p/9883237.html
Copyright © 2011-2022 走看看