zoukankan      html  css  js  c++  java
  • Dockerfile

    Dockerfile是什么?

    用于构建镜像的文本文件。

    Dockerfile基本内容

    FROM nginx 定制一个基于nginx的镜像
    RUN:
    shell格式:
    RUN 命令行命令 等同于在终端操作的shell命令
    exec格式:
    RUN ["可执行文件","参数1","参数2"] 等价于 RUN 可执行文件 参数1 参数2

      ps:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
            FROM centos
            RUN yum install wget
            RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
            RUN tar -xvf redis.tar.gz
            以上执行会创建 3 层镜像。可简化为以下格式:
            FROM centos
            RUN yum install wget 
                && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" 
                && tar -xvf redis.tar.gz
    

    如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

    构建镜像

    docker build -t nginx:v3 .

    上下文路径
    有提到指令最后一个 . 是上下文路径,那么什么是上下文路径呢?

    上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

    解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件

    一起打包提供给 docker 引擎使用。

    如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

    ps:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

    常用命令

    CMD

    类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    CMD 在docker run 时运行。
    RUN 是在 docker build。

    COPY

    复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

    COPY [--chown=:] <源路径1>... <目标路径>
    COPY [--chown=:] ["<源路径1>",... "<目标路径>"]

    ADD

    ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

    ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
    ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

    ENV

    设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

    ENV
    ENV = =...

    ps:感觉类似于定义宏

    VOLUME

    定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
    作用:

    避免重要的数据,因容器重启而丢失,这是非常致命的。
    避免容器不断变大。
    格式:
    VOLUME ["<路径1>", "<路径2>"...]
    VOLUME <路径>

    Dockerfile示例文件

    FROM python:3.7-alpine
    WORKDIR /code #设置镜像工作目录
    ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["flask", "run"]

    requirements.txt内容:

    flask
    redis

  • 相关阅读:
    数据结构与算法(五):栈
    数据结构与算法(四):线性表二
    数据结构与算法(三):线性表一
    数据结构与算法(二):时间复杂度和空间复杂度
    数据结构与算法(一):什么是数据结构
    数据结构-希尔排序法
    数据结构-插入排序法
    数据结构-选择排序法
    数据结构-冒泡排序法
    数据结构-排序法
  • 原文地址:https://www.cnblogs.com/yisicanmeng/p/14052389.html
Copyright © 2011-2022 走看看