• N46期第十周作业


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

    一、制作CentOS系统镜像

    1.编写Dockerfile文件

    vim Dockerfile

    FROM centos:centos7.8.2003
    LABEL maintainer="dave <root@davidwang.com>"
    RUN rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Australia/Sydney /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 vim-enhanced tcpdump lrzsz tree telnet bash-completion
    net-tools wget bzip2 lsof zip unzip nfs-utils gcc make gcc-c++ glibc
    glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel
    && rm -rf /var/cache/yum/*
    && useradd -u 88 www

    2.生成CentOS系统镜像

    vim bulid.sh

    #!/bin/bash
    TAG=$1
    docker build -t centos7:$TAG .
    docker images

    ./build.sh v2.0

    docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos7 v2.0 df80f2e1ddcf 18 minutes ago 399MB

    docker history centos7:v2.0

    IMAGE CREATED CREATED BY SIZE COMMENT
    df80f2e1ddcf 20 minutes ago /bin/sh -c rm -f /etc/localtime && ln -s ../… 196MB
    4ca83db447d0 24 minutes ago /bin/sh -c #(nop) LABEL maintainer=dave <roo… 0B
    afb6fca791e0 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
    <missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
    <missing> 2 months ago /bin/sh -c #(nop) ADD file:72b194edf3abedf51… 203MB

    二、制作nginx镜像

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

    cd /data/dockerfile/web/nginx/nginx-1.18 && wget http://nginx.org/download/nginx-1.18.0.tar.gz && tar xf nginx-1.18.0.tar.gz
    vim nginx-1.18.0/conf/nginx.conf
    user www;
    root /data/html;
    echo "nginx website based on dockerfile" > index.html

    2.编写Dockerfile文件

    vim Dockerfile

    FROM centos7:v2.0
    LABEL maintainer="dave <root@davidwang.com>"
    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*
    && ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
    COPY nginx.conf /apps/nginx/conf/
    COPY index.html /data/html/
    EXPOSE 80 443
    CMD ["nginx","-g","daemon off;"]

    3.生成 nginx 镜像

    vim build.sh

    !/bin/bash
    TAG=$1
    docker build -t nginx-1.18-centos7:$TAG .
    docker images
    ./build.sh v1.0
    docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    nginx-1.18-centos7 v1.0 dee66ea00791 3 minutes ago 422MB

    4.生成容器测试镜像

    docker run -P -d --name n1 nginx-1.18-centos7:v1.0
    docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    661d4ad89b19 nginx-1.18-centos7:v1.0 "nginx -g 'daemon of…" 5 seconds ago Up 3 seconds 0.0.0.0:32776->80/tcp, 0.0.0.0:32775->443/tcp n1
    docker port n1
    443/tcp -> 0.0.0.0:32775
    80/tcp -> 0.0.0.0:32776
    curl 10.0.0.91:32776
    nginx website based on dockerfile
    docker exec -it n1 bash
    ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.1 20580 2448 ? Ss 00:05 0:00 nginx: master process nginx -g daemon off;
    www 6 0.0 0.1 21016 2280 ? S 00:05 0:00 nginx: worker process
    root 7 0.5 0.1 12336 3588 pts/0 Ss 00:14 0:00 bash
    root 30 0.0 0.1 51768 3424 pts/0 R+ 00:15 0:00 ps aux

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

    1.FROM: 指定基础镜像, 需要放在Dockerfile第一行
    FROM scratch 特殊镜像: 是所有镜像的起源镜像

    2.LABEL:指定镜像元数据, 也就是镜像描述信息, 作者, 版本等...
    维护者: LABEL maintainer="dave <root@davidwang.com>" version="1.0"

    3.RUN:用来在构建镜像阶段需要执行FROM指定镜像所支持的shell命令
    # shell格式,支持环境变量
    RUN <命令>
    RUN rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Australia/Sydney /etc/localtime
    # exec格式,不支持环境变量,注意:是双引号,不能是单引号
    RUN ["可执行文件", "参数1", "参数2"]
    RUN ["/bin/bash","-c","echo hello david"]

    4.ENV:设置环境变量。会被后续指令(如:ENV,ADD,COPY,RUN等)通过$KEY或${KEY}进行引用,并在容器运行时保持
    #ENV <key> <value> 此格式只能对一个key赋值
    ENV author dave
    #ENV <key1>=<value1> <key2>=<value2> ... 此格式可以支持多个key赋值,定义多个变量建议使用,减少镜像层
    ENV VERSION="1.0" DATE="2020-08-03"
    RUN mkdir /data && touch /data/test${DATE}_${VERSION}.log

    5.COPY:复制文本 一般用于将在宿主机上事先准备的配置文件复制到镜像中
    COPY [--chown=<user>:<group>] <src>... <dest>
    COPY Centos-7.repo /etc/yum.repos.d/

    6.ADD:复制和解包文件。增强版的COPY,不仅支持COPY,还支持解压缩
    ADD [--chown=<user>:<group>] <src>... <dest>
    ADD http://nginx.org/download/nginx-1.18.0.tar.gz /data (不会解压缩)
    ADD nginx-1.18.0.tar.gz /usr/local/src

    7.CMD:容器启动命令,一个容器中需要持续运行的进程一般只有一个,CMD 用来指定启动容器时默认执行的一个命令,且其运
    行结束后,容器也会停止,所以一般CMD 指定的命令为持续运行且为前台命令.
    #使用 exec 执行,推荐方式,第一个参数必须是命令的全路径,此种形式不支持环境变量
    CMD ["executable","param1","param2"]
    CMD ["nginx", "-g", "daemon off;"]
    #在 /bin/sh 中执行,提供给需要交互的应用;此种形式支持环境变量
    CMD command param1 param2
    CMD nginx -g daemon off;
    #提供给 ENTRYPOINT 命令的默认参数;
    CMD ["param1","param2"]

    8.ENTRYPOINT:功能类似于CMD,配置容器启动后默认执行的命令及参数

    9.EXPOSE:指定服务端的容器需要对外暴露的监听端口,EXPOSE 仅仅是声明容器打算使用什么端口,并不会真正暴露端口,可以通过docker run -P | -p 真正暴露。
    即使Dockerfile没有EXPOSE端口指令,也可以通过docker run -p 临时暴露容器内程序真正监听的端口。
    EXPOSE <port>[/ <protocol>] [<port>[/ <protocol>] ..]
    EXPOSE 80 443

    10.WORKDIR:指定工作目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录,当容器运行后,进入容器内的默认目录。
    WORKDIR /apps/nginx
    RUN cd /data/html
    RUN touch test.html

    3.请写出dockerfile的分层原理

    第一层: 构建的是官方下载的基础镜像, 比如CentOS或者Ubuntu, 在此基础上进行镜像定制

    第二层: 按照需求在基础镜像上添加各种功能, 比如安装常用命令, 创建账号等

    第三层: 用于构建应用镜像, 只有系统的镜像是没有生产力的, 需要安装相应程序才能提供服务

    第四层: 构建适用的业务镜像, 也就是 添加业务代码等

  • 相关阅读:
    web前端的面试真题
    web前端面试真题! 面试的经历和回答只做参考1
    web前端面试真题! 面试的经历和回答只做参考
    html面试资料
    angluar.js的核心介绍
    解决 Chrome支持小于12px 的文字
    div居中效果出现的问题和解决方法
    li和li之间的bug解决方法
    前端面试题笔试考题和答案
    html5新增的标签和使用的方法
  • 原文地址:https://www.cnblogs.com/davidwang1970/p/13443122.html
Copyright © 2020-2023  润新知