马哥博客作业第十周

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

  1)、先制作基于基础镜像的centos系统镜像

    下载基础镜像:docker pull centos:centos7.8.2003

    制作Dockerfile文件:vim Dockerfile

    FROM centos:centos7.8.2003

    LABEL maintainer="wujianfu <root@www.com>"

    RUN yum -y install wget && rm -rf /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 -y install vim-enhanced tcpdump lrzsz bash-completion tree telnet net-tools lsof  iproute psmisc bzip2 nfs-utils
      && rm -rf /var/cache/yum/* && rm -f /etc/localtime
&& ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    构建生成新的系统镜像:docker build -t centos7.8:v1.0 .

  2)、制作nginx编译镜像

    在Dockerfile目录下准备编译安装的相关文件:

    wget http://nginx.org/download/nginx-1.18.0.tar.gz

    编辑nginx配置文件,修改下面内容:vim nginx.conf

    user nginx;

    daemon off;

    修改nginx主页面内容:

    echo "Nginx-1.18.0 In Docker" > index.html

    制作Dockerfile文件:vim Dockerfile

    FROM centos7.8:v1.0

    LABEL maintainer="wujianfu <root@www.com>"

    RUN yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel && useradd -r -s /sbin/nologin nginx

      && yum clean all &&

    ADD nginx-1.18.0.tar.gz /usr/local/src/

    RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install

      && rm -rf /usr/local/src/nginx*

    ADD nginx.cfg /apps/nginx/conf/

    COPY index.html /apps/nginx/html/

    RUN ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx

    EXPOSE 80 443

    CMD ["nginx"]

    构建生成nginx镜像:docker build -t nginx1.18-centos7.8:v1.0 .

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

  FROM:指定基础镜像,此指令必须放在Dockerfile文件第一个非注释行,后续的指令都是运行于此基础镜像提供的运行环境。

  LABEL:指定镜像元数据,如维护者信息、镜像作者等。

  RUN:指定在构建镜像阶段需要执行FROM指向基础镜像所支持的shell命令,有两种格式:shell格式和exec格式。

  COPY:复制文本,一般用于在宿主机上将事先准备的配置文件复制到镜像中。

  ADD:复制和解包文件,可以是Dockerfile所在目录的相对路径,或URL,或tar文件。通过URL下载的文件权限默认600,且获取的tar文件不会自动解压缩。

  ENV:定义环境变量 ,可被后续指令(如ADD, COPY, RUN等)通过$KEY或${KEY}进行引用,并在容器运行时保持。

  VOLUME:在容器中创建一个可以从宿主机或其他容器挂载的挂载点,一般用来存放数据,即使删除容器,宿主机的目录仍会保留,从而实现数据持久保存。

  CMD:用来指定启动容器时默认执行的命令,每个Dockerfile只能有一条CMD命令,如果有多条,只有最后一条执行。

  WORKDIR:指定工作目录,为后续的指令配置工作目录,当容器运行后,进入容器内的默认工作目录。

  EXPOSE:指定容器需要对外监听的端口号,实现容器与外部通信。

  USER:指定运行容器时的用户名,后续的RUN也会使用指定用户。当服务不需要管理员权限时,可以通过该指令指定运行用户。

 

3.请写出dockerfile的分层原理

  1)、每一行以Dockerfile的指令开头,指令不区分大小写,惯例使用大写

  2)、使用#作为注释

  3)、每一行只支持一条指令,每条指令可以携带多个参数

  4)、指令按文件的顺序从上至下执行

  5)、每个指令的执行都会生成一个新的镜像层,为了减少分层和镜像大小,尽可能将多条指令合并成一条

  6)、每次执行Dockerfile都按顺序从头开始执行,已经执行过的指令已经缓存,不需再执行,为加速镜像制作,将最常变化的指令放在Dockerfile的后面

原文地址:https://www.cnblogs.com/babyblue3/p/13425459.html