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*
(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
- docker创建自己的image
- 在docker下创建自己的image
- docker系列之三 :创建自己的image并上传到docker hub
- Docker入门二构建自己的image
- Docker官方文档笔记——创建自己的image初窥,和Inspect,port命令
- gem5创建自己的disk image
- Docker创建自己需求的镜像
- 自已创建Docker Base Image
- 局域网部署docker--从无到有创建自己的docker私有仓库
- 局域网部署Docker--从无到有创建自己的Docker私有仓库
- docker系列二 创建自己的docker及Dockerfile语法
- 【二十一】Docker-创建自己的Docker镜像
- 阿里云ECS用docker创建apache2的image
- 创建docker image时可能会用到的.dockerignore
- openstack 管理 四十一 创建自己的 glance image
- docker创建私有仓库及存储image
- 基于已有的image,创建docker images
- Docker image创建之Hello world
- UITextField和UITextView
- 为什么const对象只能访问const成员函数
- C# GetType().GetProperty(name).SetValue与Expression
- C++中const、volatile、mutable的用法
- asmack register bad-request 400 问题 asmack-android-8-4.0.7注册问题
- docker创建自己的image
- Dagger
- 在Maven仓库中添加Oracle JDBC驱动
- 如何为页面增加保护,不可Copy,看源代码等
- SAT阅读真题资料4
- Maven项目架构的默认资源路径
- DMA解析
- PressGrid 多用户墙贴(花瓣) WordPress主题[更新至v3.1]
- Winform 获取Win7 UAC 管理员权限