马哥博客作业第十周

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镜像上,减少排错时间和精力,节省时间成本等.再比如构建业务镜像过程中,可以灵活的定制化自己所需要的服务,和配置文件等.这样就不需要再重头开始一步步的制作镜像.

原文地址:https://www.cnblogs.com/huangguangrui/p/13420154.html