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

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

一、使用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. 创建docker镜像的两种方式

    文章目录 前言 第一种方式: 通过docker commit 创建镜像 通过Dockerfile构建 前言 通过docker run -it centos:7 运行的容器之中是没有vim的 这里我们创 ...

  2. idea 使用 Docker 打包镜像的两种方式_07

    idea 使用 Docker 打包镜像的两种方式_07 一.方式: 一.idea 的docker 插件 和Dockerfile: 二.pom和Dockerfile结合. 二.详解 第一种: 1.第一步 ...

  3. Docker生成镜像的两种方式

    有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像 两种方式: 更新镜像:使用docker commit 命令 构建镜像:使用docker build 命 ...

  4. Unity中制作自定义字体的两种方式

    Unity支持自定义图片字体(CustomFont),网上有很多教程,细节不尽相同,当概括起来基本就是两种方式.一是使用BMFont,导出图集和.fnt文件,再使用图集在Unity中设置得到字体.二是 ...

  5. Docker中定制镜像的两种方法

    一.需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh.所以上网也查了查资料.下面详细的纪录下.在centos 容器内安 ...

  6. 公司企业网站怎么制作呢?这2种方式要了解

    其实对于公司企业网站的制作,主要还是根据公司的运营需求去制作网站.如果是普通的企业网站的话,制作也是比较简单的,可以直接在网络上下载一些免费的企业网站模板.然后让技术人员进行模板bug的修复.那么公司 ...

  7. docker制作镜像的两种方法

    一.需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh.所以上网也查了查资料.下面详细的纪录下.在centos 容器内安 ...

  8. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  9. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

最新文章

  1. 在 Swift 中使用闭包实现懒加载
  2. pandas读取html并排序,使用pandas怎么实现按照列的值进行排序
  3. DisplayContent、StackBox、TaskStack笔记
  4. 前端字符串内HTML标签无效的处理方式
  5. 炫界 (795) -(脸兵马俑)_秦兵马俑彩绘脱落背后的秘密: 粘合剂竟然是动物胶与蛋类混合...
  6. vector父类类型可以存放子类吗_拼夕夕三轮面经:被问到反射和泛型的bug,你踏空了吗?...
  7. TF-卷积函数 tf.nn.conv2d 介绍
  8. pytorch DistributedDataParallel提示未参与loss计算的变量错误
  9. 2018.12.18
  10. Vmware虚机机挂起后无法远程连接
  11. snprintf与sprintf的区别
  12. excel制作简单账本
  13. 差点以为是本人!这个3D人体生成模型厉害了,还能自己改POSE
  14. 蜂窝物联网终端用户数比上年末净增1.22亿户,而上年同期(2020.1~5)净增6886万户,同比增长77%
  15. android常见线程简要分析
  16. tcp 握手失败_什么是三次握手,握手为何要进行三次,如果握手失败会有什么后果...
  17. cmd模式怎么恢复服务器桌面,cmd命令下恢复服务器桌面
  18. 键盘右边数字键不能用,只能当方向键使用
  19. 实现 Trie (前缀树)
  20. 网络和IP地址计算器

热门文章

  1. namespace for c++
  2. .NET简谈事务、分布式事务处理
  3. CF722D. Generating Sets[贪心 STL]
  4. JS 实现 jQuery的$(function(){});
  5. 这样就算会了PHP么?-11
  6. iptables学习(2)
  7. ANT:fileset中使用exclude
  8. 如何更改服务器上的数据库文件夹,如何设置数据库文件位置
  9. 训练不出结果_训练赛惨败SKT?FPX直播透露拿冠军原因!Karsa再谈离开RNG?
  10. 性能测试 获取 服务器间响应时间,性能测试指标分析TPS、响应时间、并发量等...