dockerfile
一.Dockerfile概述
创建容器的方式,以文件的形式构建一个镜像
文件内部:需要使用的脚本,软件包,就需要和dockerfile放在目录
1.docker镜像分层
镜像内部会有多个小的镜像构成:例如centos、nginx、nginx依赖环境,以堆叠分层的方式构成镜像
- dockerfile中的每个指令会创建一个新的镜像层
- 镜像层将被缓存和复用
- 当dockerfile指令修改,复制的文件变化,对应的镜像层缓存就会失效
- 某一层镜像缓存失效后,之后的镜像层缓存都会失效
- 镜像层不可改变,如果在某一层添加文件,下一层删除,镜像中依然存在
container:容器层,读写执行层
子镜像:add nginx image
add gcc gcc-c++ image
基础镜像/系统镜像:centos base image
内核层:bootfs,aufs
bootfs:包含了aufs和LXC
aufs:是一种联合文件系统,使用同一个linux host的多个目录,堆叠起来,以统一的方式,提供自己的功能(docker镜像的分层原理)
2.docker镜像分层
基于AUFS构建
第一层镜像的下一层成为父镜像
第一层镜像为 base image(操作系统环境镜像)
容器层(可读可写),在最顶层(writable)
容器层一下都是readonly
bootfs | docker底层依赖的库、内核,负责与内核交互 |
---|---|
base image(底包) | 基础镜像centos |
imags(只读) | 固化了一个标准运行环境 镜像的本身功能–分装—组件功能性的文件通过统一的方式,文件格式提供出来 |
container | 容器层(读写层) (读写—执行层) docker-server 端----->呈现给docker-client |
3.dockerfile指令组成
1.基础镜像信息(操作系统是什么镜像和版本
2.维护者信息
3.镜像操作命令
4.容器启动时执行的命令(启动容器的时候,执行的脚本/命令参数等)
二.构建镜像指令
指令 | 含义 |
---|---|
FROM镜像 | 指定镜像所基于的镜像,第一条指令必须为FROM,每创建一个镜像就需要一条FROM指令 |
MAINTAINER名字 | 说明镜像的维护人信息 |
RUN命令 | 在所基于镜像上执行命令,并提交到新的镜像中 |
CMD[ "要运行的程序”,“参数1,“参数2”] | 指令启动容器要运行的命令或者脚本,dockerfile只能有一台cmd命令,如果指定多条只能最后一条被执行 |
EXPOSE端口号 | 指定新镜像加载到docker时要开启的端口 |
ENV环境变量 变量值 | 设置一个环境变量的值,会被后面的run使用 |
ADD源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与dockerfile位于相同目录中,或者一个URL |
copy源文件/目录 目标文件/目录 | 将本地主机上的文件/目录复制到目标地点,源文件/目录要与dockerfile在相同目录中 |
volume[”目录“] | 在容器中创建一个挂载点 |
user用户名/uid | 指定运行容器时的用户 |
workerid 路径 | 为后续的run、cmd、entrypoint指定工作目录 |
onbuild命令 | 指定所生成的镜像作为一个基础镜像时索要运行的命令 |
healthcheck | 健康检查 |
add和copy区别
1.copy:仅用于复制
add可解压,对文件进行操作
2.资源消耗
copy消耗的资源时小于ADD的
三.构建Apache镜像
1.创建目录并编写Dockerfile文件
mkdir apache
cd apache
vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER wt
#原镜像操作指令——安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启端口
EXPOSE 80
#复制网站首页文件到指定位置
ADD index.html /var/www/html/index.html
#将执行脚本复制到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时运行脚本
CMD ["/run.sh"]
2.编写执行脚本和首页内容
vim run.sh
#!/bin/bash
#清除缓存,安装完毕后有一些默认文件
rm -rf /run/httpd/*
#启动apache,-D表示守护进程
exec /usr/sbin/apachectl -D FOREGROUND
3.准备网页文档
echo "hello world" > index.html
4.生成镜像
docker build -t httpd:centos .
5.运行容器
docker run -d -p 1234:80 httpd:centos
docker ps -a
-P使用随机端口,也可以-p使用指定端口
6.网页验证
http://192.168.133.10:1122
四.挂载数据卷
- 通过挂载数据卷的方法,可以在不进入容器的情况下编辑网页文档
#宿主机目录/root/apache挂载到容器中的/var/www/html
docker run --name web -d -p 8080:80 -v /root/apache:/var/www/html httpd:centos
#拖入图片并,编辑网页文档
<Img src="c.jpg"/>
</body>
</html>
验证:
总结:
dockerfile:以文件形式,构建镜像
add和copy区别
1.copy:仅用于复制
add可解压,对文件进行操作
2.资源消耗
copy消耗的资源时小于ADD的
dockerfile操作命令
FROM:指定新镜像
MAINTAINER:镜像维护人员信息
RUN:镜像执行命令,提交到新镜像中
EXPOSE:指定新镜像加载到docker时要开启的端口
ADD:复制文件,必须是相同目录中,可解压
COPY:复制文件,源文件/目录要与dockerfile相同目录中
CMD:启动容器要运行的脚本/命令,只能有一条CMD命令