N46期第10周作业


1.通过dockerfile 制作centos系统镜像然后再制作 nginx编译镜像

1----编写Dockerfile

建文件夹
mkdir -pv /data/dockerfile/{system/{centos,ubuntu,debian,alpine},web/{nginx,apache,tomcat,jdk}}

FROM centos:centos7.8.2003
LABEL maintainer="lz 254127092@qq.com"
RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
yum install -y wget && cd /etc/yum.repos.d/ && rm -f * && \
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && \
yum install -y vim-enhanced iproute net-tools tree psmisc tcpdump lrzsz telnet bash-completion lsof \
bzip2 zip unzip nfs-utils && rm -rf /var/cache/yum/*

2----写系统镜像的build.sh

tag=$1
docker inspect centos7.8.2003:v$tag &> /dev/null
if [ $? -ne 0 ];then
docker build -t centos7.8.2003:v$tag .
echo -e "\033[1;32m `docker images` \033[0m"
else
echo -e "\033[1;31m 版本 $tag 已存在 \033[0m"
fi

3-----编写nginx的Dockerfile

FROM centos7.8.2003:v2.0
LABEL maintainer="lz 254127092@qq.com"
COPY CentOS-Base.repo /etc/yum.repos.d/
ADD nginx-1.18.0.tar.gz /usr/local/src/
RUN yum install -y gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel && \
cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install && \
ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx && mkdir /apps/nginx/conf.d/
COPY nginx.conf /apps/nginx/conf/
COPY index.html /data/html/
ENV DOC_ROOT='/data/html/'
ADD index.html ${DOC_ROOT}
CMD ["/usr/sbin/nginx","-g","daemon off;"]

4-----将需要的文件放到nginx的dockerfile的文件夹下

5-----编写nginx的build.sh

tag=$1
docker inspect nginx_1.18:v$tag &> /dev/null
if [ $? -ne 0 ];then
docker build -t nginx_1.18:v$tag .
echo -e "\033[1;32m `docker images` \033[0m"
else
echo -e "\033[1;31m 版本 $tag 已存在 \033[0m"
fi

2.写出10个常用的dockerfile 脚本参数及使用说明

FROM centos7.8.2003:v2.0 拉取基础镜像

LABEL maintainer="lz 254127092@qq.com" 指定镜像元数据

ENV DATE="2020-08-02" VERSION="1.0" 设置环境变量

ADD nginx-1.18.0.tar.gz /usr/local/src/ 和copy功能类似,比copy多了部分功能,能实现网络下载,压缩文件自动解压(不是从网络下载的文件)

RUN yum install -y gcc 执行命令

COPY nginx.conf /apps/nginx/conf/ 复制文件

EXPOSE 将容器的端口暴露出来,实现和外部通信

WORKDIR 指定工作目录 默认进入容器后的目录

VOLUME 将容器内的文件或目录同步到宿主机上 ,实现删除容器后文件数据依然保存在宿主机上

CMD 启动容器后执行的命令 ,如果有多个,只执行最后一个,上面的被覆盖

ENTRYPOINT 指定容器启动后执行的命令 不可以被docker run 后执行的命令替代


3.请写出dockerfile的分层原理

镜像分层有助于节约空间,时间,排错,存储。对每层的内容进行运算,如果内容一样,可以利用缓存或者中间镜像,节约空间和时间。
当出现命令错误时,会利用生成的中间镜像,更方便排错。分为基础镜像和应用镜像,可以分别调试。

Docker的镜像是分层的,镜像底层为库文件且只读层即不能写入也不能删除数据,从镜像加载启动为一
个容器后会生成一个可写层,其写入的数据会复制到宿主机上对应容器的目录

每个指令的执行会生成一个新的镜像层,为了减少分层和镜像大小,尽可能将多条指令合并成一条指令
制作镜像一般可能需要反复多次,每次执行dockfile都按顺序执行,从头开始,已经执行过的指令已经缓存,不需要再执行,如果后续有一行新指令没执行过,其往后的指令将会重新执行,所以为
加速镜像制作,将最常变化的内容放下dockerfile的文件的后面

原文地址:https://www.cnblogs.com/ssel/p/13428571.html