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

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

一、使用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页面,查看到刚刚制作的镜像了。

二、使用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 '/^session\s\+required\s\+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入门实例

制作Docker镜像的两种方式的更多相关文章

  1. SpringBoot 构建 Docker 镜像的 3 种方式

    本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像. (1)使用 spring-boot-maven-plugin 内置的 build-image. (2) ...

  2. 使用Portainer管理其他主机的docker应用有两种方式

    官方文档地址:https://docs.portainer.io/v/ce-2.9/admin/environments/add/docker 第一种方式 是在其他主机的docker 启动中放开237 ...

  3. 在Portainer上管理其他docker主机(这只是其中一种方式),另一种方式看这个文档:使用Portainer管理其他主机的docker应用有两种方式

    其他主机开启远程连接docker端口 需要设置一下2375端口的监听.通过修改docker配置文件方式进行监听. 修改配置文件修改监听端口 使用Centos7安装的docker,所以下面的配置是适用于 ...

  4. Docker镜像构建的两种方式(六)--技术流ken

    镜像构建介绍 在什么情况下我们需要自己构建镜像那? (1)当我们找不到现有的镜像,比如自己开发的应用程序 (2)需要在镜像中加入特定的功能 docker构建镜像有两种方式:docker commit命 ...

  5. Docker镜像构建的两种方式(六)

    镜像构建介绍 在什么情况下我们需要自己构建镜像那? (1)当我们找不到现有的镜像,比如自己开发的应用程序 (2)需要在镜像中加入特定的功能 docker构建镜像有两种方式:docker commit命 ...

  6. web项目docker化的两种方法

    标题所讲的两种方法其实就是创建docker镜像的两种方法 第一种:启动镜像后进入容器中操作,将需要的软件或者项目移动到容器中,安装或者部署,然后退出即可 第二种:编写dockerfile,将需要的镜像 ...

  7. Docker镜像构建的两种方式

    关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行 ...

  8. 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...

  9. [转] 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    原文地址:https://www.cnblogs.com/tianshifu/p/8127837.html 前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少 ...

随机推荐

  1. .NET MVC 4 实现用户注册功能

    初学MVC,踩了不少坑,所以通过实现一个用户注册功能把近段时间学习到的知识梳理一遍,方便以后改进和查阅. 问题清单: l 为什么EF自动生成的表名后自动添加了s? l 如何为数据库初始化一些数据? l ...

  2. poj1125--Floyd

    题解: 有N个股票经济人能够互相传递消息.他们之间存在一些单向的通信路径.如今有一个消息要由某个人開始传递给其它全部人.问应该由哪一个人来传递,才干在最短时间内让全部人都接收到消息. 显然,用Floy ...

  3. [听听音乐]X-Ray Dog

    X-Ray Dog是一个专门为好莱坞电影预告配乐的音乐工作室. https://music.163.com/#/artist?id=105618 有空的时候听听.

  4. java代码中的三元表达式

    1.格式 布尔型表达式?a:b,例子:boolean c;int a=1,b=2;c=a>b?10:15,这样子最终返回的结果是15

  5. Machine Learning in Action(7) 回归算法

    按照<机器学习实战>的主线,结束有监督学习中关于分类的机器学习方法,进入回归部分.所谓回归就是数据进行曲线拟合,回归一般用来做预测,涵盖线性回归(经典最小二乘法).局部加权线性回归.岭回归 ...

  6. appium(12)-The starting of an app

    Steps: you have to prepare environment for Android. Details are provided here: http://appium.io/slat ...

  7. 关于Fragment的onActivityResult 不执行

    1.getActivity().startActivityForResult();  与 fragment.startActivityForActivity(): getActivity().star ...

  8. FFmpeg滤镜代码级分析

    http://blog.chinaunix.net/uid-26000296-id-3322071.html 前一篇文章<为FFmpeg添加自定义滤镜>详细讲述了FFmpeg的滤镜添加步骤 ...

  9. 自定义标签(客户化jsp标签)

    客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...

  10. Android之styles.xml,以及自定义风格

    1.styles.xml 在现在的ADT创建的Project中,会有values,values-v11和values-v14三个文件夹,每个文件夹下都有一个styles.xml. API11是Andr ...