第10周作业 docker创建镜像
1.通过dockerfile 制作centos系统镜像然后再制作 nginx编译镜像
#mkdir /data/dockerfile/{web/{nginx,tomcat,jdk},system/{centos,ubuntu,alpine,debian}} -p
#cd /data/dockerfile/system/centos
#vim Dockerfile
FROM centos:centos7.7.1908
LABEL author="LHR" version="1.0"
RUN rm -f /etc/localtime \
&& ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime\
&& yum -y install wget && rm -rf /etc/yum.repos.d/* \
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo\
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo\
&& yum -y install curl iproute net-tools psmisc gcc gcc-c++ glibc-devel\
vim-enhanced tcpdump tree telnet make lrzsz pcre pcre-devel openssl \
openssl-devel && rm -rf /var/cache/yum/*
#docker build -t centos:v1.0 .
#cd /data/dockerfile/web/nginx
#wget http://nginx.org/download/nginx-1.16.1.tar.gz
#vim Dockerfile
FROM centos:v1.0
LABEL author="LHR" version="1.0"
ADD nginx-1.16.1.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx \
&& make && make install && useradd -r nginx
EXPOSE 80 443
CMD ["/apps/nginx/sbin/nginx","-g","daemon off;"]
#docker build -t nginx:v5.0 .
#docker run -d -p 80:80 nginx:v5.0
#curl 10.0.0.132:80 (访问本地浏览器)
2.写出10个常用的dockerfile 脚本参数及使用说明
答:FROM:指定基础镜像,一般都以基础的系统镜像为开始,如ubuntu,centos,busybox等。
如:FROM centos
或者FROM centos:centos7.8
LABEL:指定镜像的一些备注信息等,最好是使用一个LABEL命令,多行时在前一行的最后加\;
如:LABEL author="LHR" version="1.0" \
multi.label="value1" \
ENV :指定环境变量,一般最好使用键值对的方式,<key>="value1"的方式,一般最好也是使用一个ENV命令,多行时在前一行的最后加\;
如:Myname="LHR" VERSION="1.0" DATE="2020-08-03"
RUN:在基础镜像的基础之上,在创建镜像之前执行一系列的命令,为所创建的镜像准备基础环境,一般使用shell格式较方便,同时建议尽量使用一个RUN命令,多行时在前一行的最后加\,不要忘记加&&;
如:RUN mkdir /data/ && touch /data/test${TIME}_${VERSION}.log
EXPOSE:暴露端口,指定服务器运行后需要对外暴露的端口号,但是在运行时不会自动在宿主机上进行端口映射,同样需要用-p或-P进行端口指定才可正常使用。
WORKDIR:为后续的工作RUN,CMD等一系列的操作指定工作目录。
COPY:复制本地宿主机的文件至镜像内,最好与Dockerfile文件在同一目录下。
如:COPY test.txt /data/
ADD:增强版的COPY,不仅可以复制,还支持解压。源文件可为绝对路径或相对路径的本地文件,URL;并且当源文件为宿主机压缩文件时,将会自动解压缩至指定目录内,若为网络压缩文件不会自动解压缩。如果是一个URL,会将压缩包自动下载至指定目录,且URL下载的文件权限自动修改为600。
CMD:镜像开启时自动执行的命令;只能指定一条CMD命令,若有多条时,只执行最后一条;但是在利用镜像启动容器时指定的操作与此命令内的有冲突时,运行docker run时指定的命令。最好使用exec格式。
备注:RUN命令重的设立了命令为创建镜像时自动执行的一系列调试,而CMD是在镜像制作好后,利用镜像创建容器时自动执行的操作。
如:CMD ["curl","https://baidu.com"],
ENTRYOINT:同CMD命令相同,但是此命令不会被docker run后追加的命令所覆盖,
如:CMD ["curl","https://baidu.com"]
docker run --rm nginx:v4.0 ls -l,执行的结果为百度的页面,而非ls -l 的结果。
3.请写出dockerfile的分层原理
答:一、原始镜像
所有镜像的源头,从0开始建起,后期所有的镜像都是在此基础之上建立起来的,从scratch开始建起,常见的有我们从官方网站下载的基础系统镜像,如centos,ubuntu,一般从官方下载的基础操作系统的镜像远远小于使用虚拟机安装的基础操作系统,操作系统由内核和根文件系统组成,而docker下载的镜像只有根目录,内核空间依赖宿主机的内核,并且很多的命令没有安装,因此节省很大空间。
二、基础系统镜像
由于基础操作镜像中没安装大部分常用命令,因此用户在使用镜像时可以在第一层时首先安装好常用的基础环境配置以及常用命令,制成镜像,在此镜像的基础之上再制作各项服务的镜像,可以避免每一项服务制作镜像时的重复操作,节省时间。
三、各项业务类型镜像
针对不同的业务类型可以在基础系统镜像的基础上进行相关的只关于此业务的相关配置,即可以节省空间,又可以提升制作容器时的效率,并且这样子制作的镜像更加具有针对性,方便分类。
备注:因为每一次制作镜像时,当前期的命令没有修改时,都会直接利用缓存的内容,因此建议制作镜像时尽量将不经常修改的内容放置靠前位置,可以节省效率。
在制作镜像写dockerfile文件时,尽量避免过多的指令。

浙公网安备 33010602011771号