• docker dockerfile使用详解


    什么是 Dockerfile

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    Dockerfile的作用

    安装dockerfile中的指令定义docker容器或者容器中的应用程序以及服务
    Dockerfile制作一个镜像模板安装模板统一生成容器

    环境介绍

    • 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录
    • 2.Dockerfile中相对路径默认都是Dockerfile所在的目录
    • 3.Dockerfile中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性。
    • 4.Dockerfile中每一条指令被视为一层
    • 5.Dockerfile中指明大写(约定俗成)

    Docker build 命令

    语法

    docker build [OPTIONS] PATH | URL | -
    

    OPTIONS说明:

    • --build-arg=[] :设置镜像创建时的变量;
    • --cpu-shares :设置 cpu 使用权重;
    • --cpu-period :限制 CPU CFS周期;
    • --cpu-quota :限制 CPU CFS配额;
    • --cpuset-cpus :指定使用的CPU id;
    • --cpuset-mems :指定使用的内存 id;
    • --disable-content-trust :忽略校验,默认开启;
    • -f :指定要使用的Dockerfile路径;
    • --force-rm :设置镜像过程中删除中间容器;
    • --isolation :使用容器隔离技术;
    • --label=[] :设置镜像使用的元数据;
    • -m :设置内存最大值;
    • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
    • --no-cache :创建镜像的过程不使用缓存;
    • --pull :尝试去更新镜像的新版本;
    • --quiet, -q :安静模式,成功后只输出镜像 ID;
    • --rm :设置镜像成功后删除中间容器;
    • --shm-size :设置/dev/shm的大小,默认值是64M;
    • --ulimit :Ulimit配置。
    • --squash :将 Dockerfile 中所有的操作压缩为一层。
    • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
    • --network: 默认 default。在构建期间设置RUN指令的网络模式

    dockerfile常用命令

    • FROM:基础镜像,FROM命令必须是dockfile的首个命令
    • LABEL:为镜像生成元数据标签信息。
    • USER:指定运行容器时的用户名或UID,后续RUN也会使用指定用户
    • RUN:RUN命令是Dockfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条RUN命令在当前镜像基础上执行,并且会提交一个新镜像层。
    • WORKDIR:设置CMD指明的命令的运行目录。为后续的RUN、CMD、ENTRYPOINT、ADD指令配置工作目录。
    • ENV:容器启动的环境变量
    • ARG:构建环境的环境变量
    • COPY:复制文件到镜像中,格式: COPY 源路径 目标路径
    • ADD: 拷复制文件到镜像中,格式: ADD 源路径 目标路径
    • CMD:容器运行时执行的默认命令
    • ENTRYPOINT:指定容器的“入口”
    • HEALTHCHECK:容器健康状态检查

    关于 ADD ,有如下注意事项:

    • 1、如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
    • 2、如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
      如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
      如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
      如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
    • 3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
      如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
    • 4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
    • COPY指令和ADD指令功能和使用方式类似。只是COPY指令不会做自动解压工作。

    演示

    使用Dockerfile构建nginx容器,添加容器健康检查

    # 基于nginx:1.17.9 镜像构建
    FROM nginx:1.17.9
    

    # 指定信息 maintainer 贡献者
    LABEL maintainer="chenshifeng@163.com"

    #设置环境变量
    ENV NGINX_VERSION 1.17.9
    ARG work_pwd=/data/html

    #切换 root 用户
    USER root

    #执行命令,安装curl 软件,设置软连接把 nginx 服务的日志显示到终端输出
    RUN apt-get -yq update && apt-get install -y curl &&
    ln -sf /dev/stdout /var/log/nginx/access.log &&
    ln -sf /dev/stderr /var/log/nginx/error.log

    #挂载卷
    VOLUME ["/data"]

    #设置工作目录
    WORKDIR ${work_pwd}

    # 复制 index.html 文件到 WORKDIR 目录下
    COPY index.html .

    # 映射 80 端口
    EXPOSE 80

    # 此处 CMD 作为 ENTRYPOINT 的参数
    CMD ["nginx","-g","daemon off;"]

    STOPSIGNAL SIGRTMAX

    # 检查容器健康,通过访问NGINX 服务80端口,来判断容器是否运行正常
    HEALTHCHECK --interval=5s --timeout=3s
    CMD curl -fs http://localhost/ || exit 1

    构建
    docker build -t n:1 .

    chenshifengdeMacBook-Pro:nginx chenshifeng$ docker build -t n:1 .
    [+] Building 2265.0s (5/8)                                                                                                                  
     => [internal] load build definition from Dockerfile                                                                                   0.0s
     => => transferring dockerfile: 276B                                                                                                   0.0s
     => [internal] load .dockerignore                                                                                                      0.0s
     => => transferring context: 2B                                                                                                        0.0s
     => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                        2.3s
     => [internal] load build context                                                                                                      0.0s
     => => transferring context: 280B                                                                                                      0.0s
     => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                 12.9s
     => => resolve docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                  0.0s
     => => sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b 27.10MB / 27.10MB                                       9.7s
     => => sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f 23.92MB / 23.92MB                                       8.2s
     => => sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49 204B / 204B                                             0.3s
    [+] Building 2265.1s (5/8)                                                                                                                => [internal] load build definition from Dockerfile                                                                                0.0s
     => => transferring dockerfile: 276B                                                                                                0.0s. => [internal] load .dockerignore                                                                                                   0.0s
     => => transferring context: 2B                                                                                                     0.0s. => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                     2.3s
     => [internal] load build context                                                                                                   0.0s. => => transferring context: 280B                                                                                                   0.0s
     => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50              1[+] Building 2265.3s (5/8)                                                                                                           => [internal] load build definition from Dockerfile                                                                           0.0s
     => => transferring dockerfile: 276B                                                                                           0.0s  => [internal] load .dockerignore                                                                                              0.0s  => => transferring context: 2B                                                                                                0.0s
     => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                2.3s  => [internal] load build context                                                                                           [+] Building 2265.4s (5/8)                                                                                                       => [internal] load build definition from Dockerfile                                                                       0.0s
     => => transferring dockerfile: 276B                                                                                       0.0s2 => [internal] load .dockerignore                                                                                          0.0s  => => transferring context: 2B                                                                                            0.0s  => [internal] load metadata for docker.io/library/nginx:1.17.9                                                         [+] Building 2265.6s (5/8)                                                                                                    
     => [internal] load build definition from Dockerfile                                                                     0.0s0 => => transferring dockerfile: 276B                                                                                     0.0s0 => [internal] load .dockerignore                                                                                        0.0s  => => transferring context: 2B                                                                                   [+] [+] Building 2267.6s (5/8)                  [+] Building[+] Building[+] Building 2268.9s (5/8)                                                                                                                    => [internal] load build definition from Dockerfile                                                                                    0.0s
     => => transferring dockerfile: 276B                                                                                                    0.0s> => [internal] load .dockerignore                                                                                                       0[+] Building 2269.1s (5/8)                                                                                                                  => [internal] load build definition from Dockerfile                                                                                  0.0s  => => transferring dockerfile: 276B                                                                                                  0.0s  => [internal] load .dockerignore                                                                                              [+] Building 2269.2s (5/8)                                                                                                                => [internal] load build definition from Dockerfile                                                                                0.0s
     => => transferring dockerfile: 276B                                                                                                0.0s[[[+] Building 2364.5s (9/9) FINISHED                                                                                                        => [internal] load build definition from Dockerfile                                                                                 0.0s> => => transferring dockerfile: 276B                                                                                                 0.0s  => [internal] load .dockerignore                                                                                                    0.0s= => => transferring context: 2B                                                                                                      0.0si => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                      2.3sn => [internal] load build context                                                                                                    0.0st => => transferring context: 280B                                                                                                    0.0s
     => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50               12.9s  => => resolve docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                0.0s= => => sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b 27.10MB / 27.10MB                                     9.7s> => => sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f 23.92MB / 23.92MB                                     8.2s  => => sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49 204B / 204B                                           0.3s= => => sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50 1.41kB / 1.41kB                                       0.0s> => => sha256:30d9dde0c4cb5ab4989a92bc2c235b995dfa88ff86c09232f309b6ad27f1c7cd 948B / 948B                                           0.0s  => => sha256:5a8dfb2ca7312ee39433331b11d92f45bb19d7809f7c0ff19e1d01a2c131e959 6.67kB / 6.67kB                                       0.0se => => extracting sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b                                            1.6s
     => => extracting sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f                                            1.0s  => => extracting sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49                                            0.0s= => [2/4] RUN apt-get -yq update && apt-get install -y curl && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stder  2349.0s> => [3/4] WORKDIR /data/html                                                                                                         0.0s  => [4/4] COPY index.html .                                                                                                          0.0s  => exporting to image                                                                                                               0.3s  => => exporting layers                                                                                                              0.3s  => => writing image sha256:663bf35f3ce6c35b0fbf159382a60ba1f271f89ae59fa32690e12f812801375c                                         0.0s  => => naming to docker.io/library/n:1                                                                                               0.0s 
    

    运行镜像

    chenshifengdeMacBook-Pro:nginx chenshifeng$ docker run -d -p 9090:80 n:1
    56b9ed9a0a49bac4e525cdcc8589467a28fbeacae47400770e037b8aee55c3ab
    

    chenshifengdeMacBook-Pro:docker-compose chenshifeng$ docker exec -it nifty_chatelet bash
    root@56b9ed9a0a49:/data/html# pwd
    /data/html       # 对应WORKDIR 工作目录
    root@56b9ed9a0a49:/data/html# ls
    index.html    # 对应 COPY index.html 
    root@56b9ed9a0a49:/data/html# env
    HOSTNAME=56b9ed9a0a49
    PWD=/data/html
    PKG_RELEASE=1~buster
    HOME=/root
    NJS_VERSION=0.3.9
    TERM=xterm
    SHLVL=1
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    NGINX_VERSION=1.17.9
    _=/usr/bin/env
    root@56b9ed9a0a49:/data/html# id
    uid=0(root) gid=0(root) groups=0(root)    # 对应#切换 root 用户 USER root
    root@56b9ed9a0a49:/data/html# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          59G  6.3G   50G  12% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           994M     0  994M   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vda1        59G  6.3G   50G  12% /data       # 挂载卷
    tmpfs           994M     0  994M   0% /proc/acpi
    tmpfs           994M     0  994M   0% /sys/firmware
    root@56b9ed9a0a49:/data/html# 
    
  • 相关阅读:
    concurrent.futures
    HTTP协议
    Web框架原理
    Docker从入门到实战应用
    Mac Homebrew超坑爹的地方
    第6章-7.找出总分最高的学生 (15分)
    第6章-6.求指定层的元素个数 (40分)
    第6章-5.列表元素个数的加权和(1) (40分)
    第6章-4.列表数字元素加权和(1) (40分)
    第6章-3.列表或元组的数字元素求和 (20分)
  • 原文地址:https://www.cnblogs.com/R-bear/p/15045817.html
Copyright © 2020-2023  润新知