通常我们在使用docker时,发现别人的镜像虽然好,但是未必适合自己,这样就需要创建自己的镜像。对存在的镜像做一定的改变有2种方式:
1、使用docker commit来扩展一个images
先使用image启动容器,更新后提交结果到新的image。
[root@localhost ~]# docker run -ti centos /bin/bash [root@c00c2500d241 /]# [root@c00c2500d241 /]# rz bash: rz: command not found #原来的centos镜像中没有rz 和 sz命令 [root@c00c2500d241 /]# yum install lrzsz -y #我们在容器中添加lrzsz包 [root@c00c2500d241 /]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. #能正常使用rz 和sz 命令了 结束之后,我们使用docker commit命令来提交我们修改之后的副本 [root@localhost ~]# docker commit -m "add lrzsz" -a="ldsnet" c00c2500d241 centos/lrzsz 94e814f3b5e94cd460fde5b55ce9b3e1e2e34e685c0ea3f7fc32b096925efb97 -m 来指定提交的信息,跟我们使用的版本控制工具一样。 -a 可以指定我们更新的用户信息指定我们要从哪个容器ID来创建我们的副本,最后指定目标image 的名字。 #使用docker images来查看我们创建的新image。 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/lrzsz latest 94e814f3b5e9 8 minutes ago 309.3 MB centos latest dade6cb4530a 3 weeks ago 224 MB
启动新创建的centos/lrzsz镜像
[root@localhost ~]# docker run -ti centos/lrzsz /bin/bash [root@65dd20aed8a7 /]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. #rz和sz命令都已经存在
2、使用dockerfile来创建images
使用docker commit 来扩展一个image比较简单,但它不容易在一个团队中分享它。我们使用docker build 来创建一个新的image。为此,我们需要创建一个dockerfile,包含一些如何创建我们的image的指令,现在,我们来创建一个目录和一个dockerfile
[root@localhost ~]# mkdir icesr [root@localhost ~]# cd icesr
每一条指令都创建一个image的新的一层,下面是一个简单的Dockerfile例子:
# This is a comment FROM ubuntu:14.04 MAINTAINER Kate Smith <ksmith @example.com> RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN gem install sinatra </ksmith>
使用#来注释
FROM指令告诉docker 使用哪个image源,
接着是维护者的信息
最后,我们指定了1条run指令。每一条run指令在image执行一条命令,比如安装一个软件包,在这里我们使用yum 来安装了一些软件现在,让我们来使用docker build来通过dockerfile创建image
[root@localhost icesr]# docker build -t="centos/lrzsz:v1" . Sending build context to Docker daemon 2.56 kB Sending build context to Docker daemon Step 0 : FROM centos:latest ---> dade6cb4530a Step 1 : MAINTAINER ldnset <ldsnet @qq.com> ---> Running in 8844ce258617 ---> ca6785795fff Removing intermediate container 8844ce258617 Step 2 : RUN yum install lrzsz -y ---> Running in 35683de8a703 Loaded plugins: fastestmirror Determining fastest mirrors * base: mirrors.sina.cn * extras: mirrors.sina.cn * updates: mirrors.sina.cn Resolving Dependencies --> Running transaction check ---> Package lrzsz.x86_64 0:0.12.20-36.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: lrzsz x86_64 0.12.20-36.el7 base 78 k Transaction Summary ================================================================================ Install 1 Package Total download size: 78 k Installed size: 181 k Downloading packages: Public key for lrzsz-0.12.20-36.el7.x86_64.rpm is not installed Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : lrzsz-0.12.20-36.el7.x86_64 1/1 Verifying : lrzsz-0.12.20-36.el7.x86_64 1/1 Installed: lrzsz.x86_64 0:0.12.20-36.el7 Complete! ---> 8c8ab1d4c7e1 Removing intermediate container 35683de8a703 Successfully built 8c8ab1d4c7e1 [root@localhost icesr]# [root@localhost icesr]# [root@localhost icesr]# [root@localhost icesr]# [root@localhost icesr]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/lrzsz v1 8c8ab1d4c7e1 46 seconds ago 309.3 MB centos/lrzsz latest 94e814f3b5e9 33 minutes ago 309.3 MB </ldsnet>
使用-t标记来指定新的image的用户信息和命令使用了.来指出dockerfile的位置在当前目录
注意:你也可以指定一个dockfile的路径
我们可以看到build进程在执行操作。它要做的第一件事情就是上传这个dockfile内容,因为所有的操作都要依据它来进行。
然后,我们看到dockfile中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交就跟之前介绍过的docker commit一样。当所有的指令都执行完毕之后,返回了一个image id,并且所有的中间步骤所产生的容器都被删除和清理了。
注意:一个image不能超过127层
从我们新建的images开启容器
[root@localhost ~]# docker run -ti centos/lrzsz:v1 /bin/bash [root@6e0ad4570b21 /]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. #rz和sz命令都已经存在
镜像创建完成之后记得使用docker push上次镜像提供给其它人使用哦!
未经允许不得转载:SRE空间 » docker创建images
评论前必须登录!
注册