目录
前言
docker 镜像的制作,可以基于容器创建镜像,也可基于 dockerfile 构建镜像。但需要注意的是,我们并不是真正"创建"新镜像,而是基于一个已有的基础镜像,如 centos 或 ubuntu 等,构建新镜像而已。
一、Docker镜像
1、镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包为docker镜像,就可以直接运行。
2、如何得到镜像
从远程仓库下载
通过拷贝获取
自己制作一个镜像DockerFile
3、Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel,Linux刚启动时会加bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸bootfs。
rootfs(root file system)在 bootfs之上。包含的就是典型 Linux系统中的 /dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如 Ubuntu,Centos等等。
二、Docker 镜像结构的分层
> docker 镜像分层(基于 AUFS 构建):
Docker 镜像位于 bootfs 之上
每一层镜像的下一层成为父镜像
第一层镜像成为 base image(操作系统环境镜像)
容器层(可读可写),在最顶层(writeout-able)
容器层以下都是 readonly
三、Dockerfile 镜像案例
1、 HTTPD
1.1 建立工作目录编写 Dockerfile 文件
[root@c7-1 ~]#mkdir /opt/apache
[root@c7-1 ~]#cd /opt/apache/
[root@c7-1 /opt/apache]#vim Dockerfile
#基于 centos:7 的基础镜像
FROM centos:7
#定义镜像的用户信息
MAINTAINER this is apache image <test>
#镜像操作指令安装 apache 软件
RUN yum -y update;yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/index.html
##前台启动方法一(需准备执行脚本)
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
##前台启动方法二(无需其他脚本)
ENTRYPOINT ["/usr/sbin/apachectl"]
#前台启动 apache,CMD 为 ENTRYPOINT 传递参数
CMD ["-D","FOREGROUND"]
1.2 准备执行脚本(前台启动方法一)
[root@c7-1 /opt/apache]#vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
#清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND
#指定为前台运行
1.3 准备网页页面
[root@c7-1 /opt/apache]#echo "this is test web" > index.html
[root@c7-1 /opt/apache]#ls
Dockerfile index.html run.sh
1.4 生成镜像
先确保自己这有 centos:7 镜像,这里使用第一种 dockerfile
#速度和网络、主机性能