欢迎光临
我们一直在努力

docker创建images

通常我们在使用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

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

oracle