挺丰富的博客内容
http://www.cnblogs.com/zhangmingcheng/
创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。
基于已有镜像的容器创建
该方法是使用docker commit命令,其命令格式为:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要参数选项包括:
- -a ,–author=”” 作者信息
- -m,–message=”” 提交信息
- -p,–pause=true 提交是暂停容器运行
比如,先创建一个运行bash的ubuntu容器:
docker run –it ubuntu /bin/bashroot@d8990fec2141:/# touch testroot@d8990fec2141:/# exit
然后根据创建的这个容器来提交一个新的镜像,提交时需要用到容器ID。
docker commit –m “test” –a “zmc” d8990fec2141 testimage
如果成功的话,就会返回新镜像的长ID号,然后可以查看看在本地已有的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 About a minute ago 188.3 MB……
第三行就是刚刚创建的镜像。
PS:利用此容器创建的镜像Id与此容器的镜像id不同,可知它们不是同一镜像。
基于本地模板导入
也可以从操作系统模板文件导入一个镜像,比如使用OpenVZ提供的模板创建,OPENVZ下载模板在:http://openvz.org/Download/template/precreated。
我尝试使用了Ubuntu14.04的模板:
1
|
wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
|
下载完之后就可以导入了:
sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04
其实只是两个命令,不过很显而易见,就不加解释了。成功的话,就会返回根据模板建立的镜像的长ID
sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35
然后就可以查看本地的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 56 seconds ago 215.4 MBtestimage latest baea98d5a437 29 minutes ago 188.3 MB….
其实可以看出,虽然模板才75M,但创建的镜像并不小。
镜像的存出和载入
可以利用docker save和docker命令来存出和载入镜像。
存出镜像
如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 25 minutes ago 188.3 MBubuntu latest fa81ed084842 3 days ago 188.3 MB….docker save –o /data/testimage.tar testimage:latest
上面的第6行就是存出代码,这时在/data下就有一个testimage.tar文件,这时我们把本地镜像rmi掉,然后尝试载入。
载入镜像
删除镜像之后的状态:
ubuntu@VM–223–238–ubuntu:/data$ docker rmi baea98d5a437Untagged: testimage:latestDeleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5bubuntu@VM–223–238–ubuntu:/data$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 5 minutes ago 215.4 MB
然后载入镜像:
docker load —input testimage.tardocker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MBtestimage latest baea98d5a437 35 minutes ago 188.3 MB
第一行就是载入镜像,还可以简化写成:
docker load < testimage.tar
载入操作将会导入镜像以及相关的元数据信息(包括标签等)。
镜像的上传
最后说点镜像的上传,镜像的管理方式非常像git,可以使用docker push命令上传自己本地镜像到仓库,默认上传到DockerHub官方仓库(需要登陆),命令格式:
docker push NAME[:TAG]
在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签:
docker tag testimage:lastest zmc/testimage:lastestdocker pushzmc/testimage:lastest
有利于上传之后的区分。
我觉得无论是运维团队还是开发团队还是一个实验室,都有必要有一个自己的Docker仓库,可以存放符合自己需求的环境或系统镜像,可以实现快速部署。
转自:梦续代码
怎样用Docker创建我们自己的镜像
Docker创建镜像
总共有两种方法:
1.用别人的镜像创建。
1.1、先下载一个容器
命令: docker pull training/sinatra
1.2、然后用容器启动这个镜像
命令:docker run -t -i training/sinatra /bin/bash
1.3、接下来就是给使用中的容器,添加自己需要的工具等,来组装自己的运行环境。
1.4、将上一步组装好的环境copy一份镜像。
命令:
docker commit -m “Added json gem” -a “KateSmith” \
0b2616b0e5a8 ouruser/sinatra:v2
说明:此处命令和git的命令svn的命令有些类似。 docker commit 是提交的意思,类似告诉svn服务器我要生成一个新的版本。
-m 就是添加注释,-a是作者。
“\” 后面跟的是 1.2的容器环境id 要生成的镜像的名称
容器的id:就是你每次输入命令行@后面的字符
例如:root@0b2616b0e5a8
镜像名称:hub的名称/镜像名称:tag
1.5、docker images命令查看自己创建的镜像。
1.6、使用新建立的镜像
命令:docker run -t -i 要生成的镜像的名称 /bin/bash
2.使用Dockerfile
两种创建方法相比,就类似以前的Java项目开发,在没有使用maven以前,所以的东西都是现在好了放到项目中,如果有新的开发人员进来,需要把项目的jar文件都拷贝给他。但是使用maven以后就是不需要了。Dockerfile就类似这样的道理
2.1、创建镜像所在的文件夹和Dockerfile文件
命令:
1、mkdir sinatra
2、cd sinatra
3、touch Dockerfile
2.2、在Dockerfile文件中写入指令,没一条指令都会更新镜像的信息例如:
# This is a comment
FROM ubuntu:14.04
MAINTAINER Kate Smith ksmith@example.com
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
格式说明:
每行命令都是以 INSTRUCTION statement 形式,就是命令+ 清单的模式。命令要大写,“#”是注解。
FROM 命令是告诉docker 我们的镜像什么。
MAINTAINER 是描述 镜像的创建人。
RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。
2.3、创建镜像
命令:docker build -t ouruser/sinatra:v2 .
docker build 是docker创建镜像的命令
-t 是标识新建的镜像属于 ouruser的
sinatra是仓库的名称
:v2 是tag
“.”是用来指明 我们的使用的Dockerfile文件当前目录的
2.4、创建完成后,从镜像创建容器
docker run -t -i ouruser/sinatra:v2 /bin/bash
到此两种创建镜像的方式就完毕了。
问题: 以上两种方式都是以Docker的镜像仓库为基础,那我用自己的系统作为镜像怎么办那?
有使用工具的,有使用镜像模板的等等,可以百度
别人已经解决了这个问题