zoukankan      html  css  js  c++  java
  • 马哥作业第十周


    1.通过dockerfile 制作centos系统镜像然后再制作 nginx编译镜像
    vim Dockerfile
    FROM centos:centos7.8.2003
    ENV author="zhangzexu <1185673631@qq.com>"
    LABEL maintainer=${author} version="v1.0"
    RUN rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak &&
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &&
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &&
    # 或者可也用COPY 把本地已经配置好的yum院cp到镜像里 也可也用ADD 去官网下载
    yum -y install wget vim net-tools iproute psmisc lsof tcpdump tree &&
    #下载一些基础包,可根据生产环境选择下载
    rm -rf /var/cache/yum/* && useradd -u 88 -r -s /sbin/nologin www
    #作为基础镜像创建www用户为后期web服务运行使用

    docker build -t centos7.8:v1 .

    wget http://nginx.org/download/nginx-1.18.0.tar.gz #先在本机下载好包

    vim Dockerfile
    FROM centos7.8:v1
    LABEL maintainer="zhangzexu"
    ADD nginx-1.18.0.tar.gz /usr/local/src/
    RUN yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel &&
    rm -rf /var/cache/yum/* && cd /usr/local/src/nginx-1.18.0 &&
    ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module
    --with-http_realip_module --with-http_sub_module && make && make install && mkdir -p /data/web &&
    echo "The is nginx in docker ,base centos7.8:v1" > /data/web/index.html &&
    sed -ri 's@#(user )nobody@1www@' /usr/local/nginx/conf/nginx.conf &&
    sed -ri 's@(worker_processes )1@1auto@' /usr/local/nginx/conf/nginx.conf &&
    sed -ri 's@#(error_log logs/error.log )info@1warn@' /usr/local/nginx/conf/nginx.conf &&
    sed -ri '21,25s@#@@' /usr/local/nginx/conf/nginx.conf &&
    sed -ri '44s@html@/data/web@' /usr/local/nginx/conf/nginx.conf &&
    sed -ri '3a daemon off;' /usr/local/nginx/conf/nginx.conf
    EXPOSE 80
    CMD /usr/local/nginx/sbin/nginx

    docker build -t centos7.8:nginx1 .
    docker run -itd --name nginx1 centos7.8:nginx1
    docker inspect nginx1 查看一下容器IP
    [root@ubuntu1804 /data/dockerfile]$ curl 172.17.0.2 获取一下页面 看看是否能够访问到
    The is nginx in docker ,base centos7.8:v1

    进到容器里 ps aux  ,显示www正在运行nginx

    2.写出10个常用的dockerfile 脚本参数及使用说明
    (1)FROM指令用于初始化一个新的镜像构建阶段,同时为之后的指令设置一个基础镜像。 因此,有效的Dockerfile必须以FROM指令开头。
    FROM <image>:<tag>
    具体示例如下:
    FROM ubuntu:18.04
    (2)MAINTAINER指令用于指定当前构建的镜像维护者信息,该指令没有具体的格式要求,通常建议使用用户名和邮箱进行标识。具体示例如下:
    MAINTAINER "zhang"<zhang@163.com>
    (3) RUN指令用于执行指定的脚本命令,有两种格式。语法格式如下:
    RUN <common>
    RUN ["executable", "param1", "param2"]
    其中每条RUN指令将在当前镜像基础上执行指定命令并提交为新的镜像。如果要执行多条RUN指令,通常会将多条RUN指令合成一条,并使用斜杠“” 来换行,这样将减少所构建的镜像的体积。
    (4)CMD指令用于指定启动容器时执行的命令,该指令有三种格式。语法格式如下:
    CMD ["executable", "param1", "param2"] #使用exec执行,也是推荐方式;
    CMD command param1 param2 #在/bin/sh中执行,提供给需要交互的应用;
    CMD ["param1", "param2"] #提供给ENTRYPOINT的默认参数;
    注意:在使用CMD指令时,每个Dockerfile只能有一条CMD指令,如果有多条CMD指令,则只有最后一条生效。如果用户启动容器时指定了运行的指令,则会覆盖掉CMD指定的指令。
    (5).EXPOSE
    EXPOSE指令用于声明容器内部暴露的端口号,供容器访问连接使用。语法格式如下:
    EXPOSE <port> [<port>...]
    (6)ENV指令用于为下文设定一个环境变量,该变量值在后续指令或内联文件中都可以使用,ENV指令有两种语法格式。语法格式如下:
    ENV <key> <value>
    ENV ,key>=<value> <key>=<value>
    (7)ADD指令用于复制指定的src资源文件到容器中的dest目录下,复制的资源可以是文件、目录及远程URLs资源。语法格式如下:
    ADD <src>... <dest>
    在使用ADD指令时,复制的src资源文件必须是当前上下文目录或其子目录,而复制的内容实际上是该目录下的所有内容,其中包括文件系统元数据,而目录本身不会被复制。当dest目录不存在时,会在复制文件时自动创建。需注意的是,当使用ADD指令复制的文件是一个压缩包时,ADD指令会在复制好该文件后,自动进行解压。
    在使用ADD指令时,复制的src资源文件路径允许使用通配符,而dest目标目录可以使用绝对路径,也可以使用预先用WORKDIR指令定义的相对路径。
    (8)COPY指令的作用与ADD指令类似,都是复制指定的src资源文件到容器中的dest目录下。区别在于,COPY指令不能复制远程URL路径文件,也不能解压文件,而ADD指令则可以。语法格式如下:
    COPY <src>... <dest>
    (9)ENTRYPOINT指令是配置容器启动后执行的命令,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT指令时,只有最后一个生效,该指令有两种语法格式。语法格式如下:
    ENTRYPOINT ["executable", "param1", "param2"] #exec格式,推荐的
    ENTRYPOINT command param1 param2 #shell格式
    (10)WORKDIR指令用于为后续的指令(如RUN,CMD,ENTRYPOINT,COPY,ADD)指定工作目录,在同一个Dockerfile文件中可以多次使用WORKDIR指令。语法格式如下:
    WORKDIR /path/to/workdir


    3.请写出dockerfile的分层原理
    Dockerfile通常会指定基础镜像,基础镜像可以认为是系统层,复制文件、执行命令、添加等操作时会生成新的镜像层,每层只记录本层(每一条指令操作就是一层)所做的更改,而这些层都是只读的,做好镜像,启动容器时,Docker 会在最顶部添加读写层,用户在容器内做的所有更改,如增加、修改、删除文件等,都是工作在读写层内,一般称该层为容器层。

  • 相关阅读:
    HTML CSS 特殊字符表
    vscode代码统计——Vscode counter
    js数组方法整理
    CSS-界面滚动时不显示滚动条
    Vue Loader 作用域CSS(scoped)——/deep/ 深入组件选择器
    PHP模板引擎,Smarty定义
    mysql触发器trigger 实例详解
    mysql关于数据库表的水平拆分和垂直拆分
    关于数据库表的水平拆分和垂直拆分
    使用Merge存储引擎实现MySQL分表
  • 原文地址:https://www.cnblogs.com/tz66/p/13433135.html
Copyright © 2011-2022 走看看