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# 
原文地址:https://www.cnblogs.com/R-bear/p/15045817.html