docker创建自己的image

来源:互联网 发布:淘宝达人互粉链接在哪 编辑:程序博客网 时间:2024/04/29 19:02
有两种方法可以创建我们自己的image
(1)、我们可以利用已有的image运行一个容器,进行update操作;然后通过docker commit操作生成一个新的image。
(2)、自己创建一个dockerfile文件,在dockerfile中定义instructions(指令)来创建image

1、基于已有的image创建自己需要的iamge

例如,从已有的training/sinatra创建一个安装了json的image
(1)从training/sinatra这个image运行一个容器
sudo docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
(2)在运行中的容器安装json
root@0b2616b0e5a8:/# gem install json
(3)使用docker commit命令copy这个容器到一个新的image
在第二步中,安装完json后,使用exit退出容器的运行,
$ sudo docker commit -m "Added json gem" -a "Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
其中,-m表示一个commit message,-a 表示author的信息,指定创建的new iamge来自于container id 0b2616b0e5a8,此外还为新建的image定义一个组合名称ouruser/sinatra:v2。
使用docker images可以看到新建的images
$ sudo docker images
REPOSITORY          TAG     IMAGE ID       CREATED       VIRTUAL SIZE
training/sinatra    latest  5bc342fa0b91   10 hours ago  446.7 MB
ouruser/sinatra     v2      3c59e02ddd1a   10 hours ago  446.7 MB
ouruser/sinatra     latest  5db5f8471261   10 hours ago  446.7 MB

2、使用dockerfile创建自定义image
  一些建议:(1)你有自定义的image创建的container应尽量是短暂的,所谓的短暂是指,你在运行容器时能实现自己目的的步骤应尽可能的少;
    (2)使用.dockerignore文件
    (3)避免安装不必要的packages,比如在数据库image中安装文本编辑器
    (4)一个容器运行一个进程,如果该容器运行的程序依赖其他服务,使用容器link系统来连接两个容器
    (5)在dockerfile的可读性和最少的layers之间保持平衡
    (6)使用cache构建
  在docker build命令中使用--no-cache=true参数可以禁用cache,docker使用cache遵循以下的规则:
(1)、首先以一个cache中存在的base image作为基准,下一个步骤就是比较instruction与所有的来自base image的child image,查看是否匹配,如果没有匹配的,则缓存是无效的。
(2)、对于RUN apt-get命令,最好以下面形式:RUN apt-get update && apt-get install -y \
    aufs-tools \
    automake \
    btrfs-tools \
    build-essential \
    curl \
    dpkg-sig \
    git \
    iptables \
    libapparmor-dev \
    libcap-dev \
    libsqlite3-dev \
    lxc=1.0* \
    mercurial \
    parallel \
    reprepro \
    ruby1.9.1 \
    ruby1.9.1-dev \
    s3cmd=1.1.0*
    

0 0
原创粉丝点击