Docker 镜像的创建方法

Docker 镜像分层

->Dockerfile中的每个指令都会创建一个新的镜像层
->镜像层将被缓存和复用
->当 Dockerfile 指令修改了 , 复制的文件变化了,或者构建镜像是指定变量不同了,对应的镜像层缓存就会失效。
->某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效。
->镜像层是不可变的,如果在某一层中添加一个文件。然后在下一次层中删除它,则镜像中依然会包含该文件。

Docker 镜像的创建方法

######################################

1.基于已有的镜像创建

创建容器
[root@cz7-1 ~]# docker create -it centos:latest /bin/bash
005fe0ee75df3b4ed652bed3035fde0cc6f111d246835048df3e8248ebd3d4c9
[root@cz7-1 ~]# docker ps -a
CONTAINER ID	IMAGE	COMMAND	CREATED	STATUS	PORTS	NAMES
005fe0ee75df	centos:latest	"/bin/bash"	8 seconds ago	Created	 	focused_lamarr
使用容器创建成为镜像
####################

语法格式:
docker  commit  [选项] 容器ID/名称  仓库名称:标签
选项:
-> -m:说明信息
-> -a:作者信息
-> -p:生成过程中停止容器的运行
[root@cz7-1 ~]# docker ps -a
CONTAINER ID	IMAGE	COMMAND	CREATED	STATUS	PORTS	NAMES
9576aa3ebca9	centos:latest	"/bin/bash"	5 seconds ago	Created	 	heuristic_noether


docker commit -m "new" -a "liang"   9576aa3ebca9   centos:new
################

2.基于本地模板创建

####################

      通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为wget http://openvz.org/Download/template/precreated.
下面是使用docker导入命令将下载的centos-6-x86_64-minimal.tar.gz模板压缩包导入为本地镜像的例子。
cat  镜像模板  | docker  import  -  新的镜像名:标签
 
 
################

3.基于Dockerfile 创建

Dockerfile 是由一组指令组成的文本配置文件,用户可以创建并编辑。其中每条指令对应linux中的一条命令
 
Docker 可以读取Dockerfile以决定如何生成一个镜像。
 
Dockerfile 结构的大致分为四个部分
基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令
 
Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。
 
FROM 镜像	指定新的镜像所基于的镜像
MAINTAINER 名字	说明新镜像的维护人
RUN 命令	在所基于的镜像上执行命令,并提交到新的镜像中。
CMD [“要运行的程序”,“参数1”,“参数2]	指定启动容器时要运行命令或者脚本,只能有一条CMD命令。
EXPOSE 端口号	只当新镜像加载到Docker时要开启的端口。
ENV 环境变量 环境变量值	设置一个环境的值,会被后面的RUN使用
ADD 源文件 / 目录 目标文件 / 目录	将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件 / 目录 目标文件 /目录	将本地主机上的源文件 / 目录复制到目标地点,源文件 / 目录要与Dockerfile在相同的目录中
VOLUME ["目录"]	在容器中创建一个挂载点
USER 用户名 /UID	指定运行容器时的用户
WORKDIR 路径	为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令	指定所生成的镜像作为一个基础镜像时所要运行的命令
^^^^^^^^^^^^^^^^^^^^^^^^^

4.创建 Dockerfile 工作目录

[root@cz7-1 /]# mkdir apache
[root@cz7-1 /]# cd apache/

5.创建并编写Dockerfile 配置文件

[root@cz7-1 apache]# vim Dockerfile
----------------------------------
## 基于的基础镜像
FROM centos
# 维护该镜像的用户信息
MAINTAINER The CentOS Project <cloud-pos@centos>
# 镜像操作指令安装apache软件包
RUN yum -y update
RUN yum -y install httpd
# 开启80端口
EXPOSE 80
# 复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本文件复制到镜像中
ADD run.sh /run.sh
RUN chmod 775 /run.sh
# 启动容器时执行脚本
CMD ["/run.sh"]
-----------------------------------

6.编写执行脚本文件内容

	[root@cz7-1 apache]# vim run.sh
------------------------------------
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
----------------------------------

7.创建测试页面

	[root@cz7-1 apache]# vim index.html
-------------------------------------
666  (自定义)
-------------------------------------

8.使用 Dockerfile 生成镜像

命令格式:docker  build [选项]  路径
-> -t :指定镜像的标签信息
使用 Dockerfile 自动生成镜像
[root@cz7-1 apache]# docker build -t httpd:centos .
Successfully built 5aba0e543f7f
Successfully tagged httpd:centos
[root@cz7-1 apache]# docker images
REPOSITORY   TAG         IMAGE ID          CREATED             SIZE
httpd              centos     5aba0e543f7f     45 seconds ago    375MB

9.基于新创建的镜像运行容器

将新生成的镜像加载到容器中运行
 
[root@cz7-1 apache]# docker run -d -p 6666:80 httpd:centos
[root@cz7-1 apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
b8348d7aacd9        httpd:centos        "/run.sh"           6 minutes ago       Up 6 minutes        0.0.0.0:6666->80/tcp   lucid_ganguly
 
验证:
[root@cz7-1 apach]# curl 192.168.73.25:6666
666
 
其中  -q  选项 :实现从本地端口 6666 到容器中80端口的眏射。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值