Docker_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

bootfsdocker底层依赖的库、内核,负责与内核交互
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命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值