Docker镜像创建的方法
1:基于已有镜像创建
基于已有景象创建主要使用dockercommit命令。实质就是把一个容器里面运行程序以及程序的运行环境打包起来生成新的镜像
命令格式:dockercommit[选项]容器ID/名称仓库名称:[标签]
常用命令选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
例:
首先启动一个镜像,在容器里修改,然后将修改的镜像生成新的镜像,需要记住id号
[root@xyue~]dockerrun-dhttpd/bin/bash 5c9edd4c9cc6f069bdc489b084530f450440f28db775f079add9dc191a69043d [root@xyue~]dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 5c9edd4c9cc6httpd"/bin/bash"7secondsagoExited(0)5secondsagoxenodochial_feynman [root@xyue~]dockercommit-m"new"-a"docke"5c9edd4c9cc6docke:test sha256:06c816fc4ae8cea60eb49bcf23fd8803045dfb23561b7f32aeb82b7cbe1109db [root@xyue~]dockerimages|grepdocke docketest06c816fc4ae849secondsago178MB
基于本地模板创建
通过导入操作系统模板文件可以生成新镜像,模板下载地址:
[root@xyue~]wgethttp://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz [root@xyue~]ls anaconda-ks.cfgdebian-7.0-x86-minimal.tar.gzdebian-7.8-x86-minimal.tar.gzDockerfile [root@xyue~]catdebian-7.0-x86-minimal.tar.gz|dockerimport-daoke:new sha256:85b8caea781438cdc433f6fc2f60621e310e7e1706e1e6b29caa8d669dd7f971 导入成功后会生成镜像ID信息 [root@xyue~]#dockerimages|grepnew daokenew85b8caea781421secondsago215MB
基于Dockerfile创建
建立工作目录
[root@xyue~]mkdir/apache
[root@xyue~]cd/apache
创建并编写Dockerfile文件
[root@xyueapache]vimDockerfile
#基于的基础镜像centos
FROMcentos
#维护该镜像的用户信息
MAINTAINERTheCentOSProject
#镜像操作指令安装apache包
RUNyum-yupdate #跟新yum仓库
RUNyuminstall-yhttpd #安装apache服务
#开启80端口
EXPOSE80
#Simplestartupscripttoavoidsomeissuseobservedwithcontainerrestart
#复制网站首页
ADDindex.html/var/www/html/index.html
#将执行脚本复制到镜像中
ADDrun.sh/run.sh
RUNchmod755/run.sh
#启动容器时执行脚本
CMD["/run.sh"]
编写执行脚本内容
[root@xyueapache]vimrun.sh
#!/bin/bash
rm-rf/run/httpd/* #//清楚httpd缓存
exec/usr/sbin/apachectl-DFOREGROUND #//启动apache服务
创建测试页面
[root@xyueapache]#echo"webtest">index.html
[root@xyueapache]#catindex.html
webtest
[root@xyueapache]#ls
Dockerfile index.html run.sh
注意以上apache文件夹的里面Dockerfile文件用的都是相对路径所以启动脚本和首页必须和Dockerfile在同一文件夹里
使用Dockerfile生成镜像
编写完成Dockerfile文件后可以通过dockerbuild命令创建镜像。
命令格式:dockerbuild[选项]路径
常用选项:
-t:指定镜像的标签信息
[root@xyueapache]dockerbuild-thttpd:centos.
···省略
安装
过程
···
使用新的镜像运行容器
将新生成的镜像加载到容器中运行
[root@xyueapache]#dockerrun-d-p12580:80httpd:centos
a38850819054c64f960dadf705912c4b59034b58c5933c3a160a40efaf731f0c
[root@xyueapache]#dockerps-a
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38850819054 httpd:centos "/run.sh" 9secondsago Up8seconds