1.通过dockerfile 制作centos系统镜像然后再制作 nginx编译镜像
制作centos7系统镜像
[17:45:38 root@aliyun /data/dockerfile/system/centos/centos7]#cat Dockerfile FROM centos:centos7.8.2003 LABEL maintainer="huangguangrui@163.com" RUN yum install -y wget && rm -f /etc/yum.repos.d/* && 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 tcpdump lrzsz tree telnet bash-completion net-tools bzip2 lsof zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel system-devel zlib-devel && yum clean all && rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime [17:45:47 root@aliyun /data/dockerfile/system/centos/centos7]#cat build.sh #!/bin/bash TAG=$1 docker build -t centos7:$TAG . docker images
基于centos7制作nginx编译镜像
[19:05:11 root@aliyun /data/dockerfile/web/nginx/1.16.1]#tree
.
├── build.sh
├── Dockerfile
├── index.html
├── nginx-1.16.1.tar.gz
└── nginx.conf
[19:05:14 root@aliyun /data/dockerfile/web/nginx/1.16.1]#cat Dockerfile
FROM centos7:v1.0
LABEL maintainer="huangguangrui@163.com"
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
&& rm -rf /usr/local/src/nginx*
&& useradd -r nginx
COPY nginx.conf /apps/nginx/conf/
COPY index.html /apps/nginx/html/
EXPOSE 80 443
CMD ["/apps/nginx/sbin/nginx"]
[19:05:33 root@aliyun /data/dockerfile/web/nginx/1.16.1]#cat build.sh
#!/bin/bash
TAG=$1
docker build -t nginx-centos7:$TAG .
docker images
......
从镜像中启动容器测试
[19:02:47 root@aliyun /data/dockerfile/web/nginx/1.16.1]#docker run -d --name n1 -p 80:80 nginx-centos7:v1.0 748472b63fea6a25cc2f4898d00be8f1cc1b7ffd5123493c316c89a92d1a422d [19:02:59 root@aliyun /data/dockerfile/web/nginx/1.16.1]#docker port n1 80/tcp -> 0.0.0.0:80
[19:10:03 root@aliyun /data/dockerfile/web/nginx/1.16.1]#curl 127.0.0.1
<h1>nginx in docker for dockerfile</h1>
2.写出10个常用的dockerfile 脚本参数及使用说明
ADD :复制和解包文件,如果复制的文件是一个压缩包,会自动解压到容器中指定目录,但URL不会解压,而且文件权限自动设置为600
CMD :容器启动命令,每个dockerfile里面有且只有一条CMD命令,若指定了多条,只有最后一条生效.
COPY :复制文本,将本地宿主机的文件复制到容器中
ENV :定义环境变量
EXPOSE :暴露端口,指定容器的映射端口
FROM :指定基础镜像,必须要放在dockerfile文件的第一个非注释行
LABEL :指定镜像元数据,比如镜像的作者等
RUN :执行shell命令,是用来在构建镜像阶段需要执行FROM指定镜像所支持的shell命令
STOPSIGNAL :退出同期的信号
USER :指定当前用户
VOLUME :挂载点,在本宿主机中创建一个挂载点,用来保存数据和存放数据库
WORKDIR :指定工作目录,当容器运行后,进入容器的默认目录
3.请写出dockerfile的分层原理
分层在于方便编写,便于自定制业务系统镜像.更方便于排错.比如制定好了底层系统镜像,测试没有问题的话,再定制nginx业务镜像时出错,我们就可以把出差的范围定位到了定制nginx镜像上,减少排错时间和精力,节省时间成本等.再比如构建业务镜像过程中,可以灵活的定制化自己所需要的服务,和配置文件等.这样就不需要再重头开始一步步的制作镜像.