Dockerfiles

Dockerfiles只是一个纯文本文件,其中包含一组用户定义的指令。docker image build用于执行Dockerfile文件

  1. FROM alpine:latest
  2. LABEL maintainer="Russ McKendrick <russ@mckendrick.io>"
  3. LABEL description="This example Dockerfile installs NGINX."
  4. RUN apk add --update nginx && \
  5. rm -rf /var/cache/apk/* && \
  6. mkdir -p /tmp/nginx/
  7. COPY files/nginx.conf /etc/nginx/nginx.conf
  8. COPY files/default.conf /etc/nginx/conf.d/default.conf
  9. ADD files/html.tar.gz /usr/share/nginx/
  10. EXPOSE 80/tcp
  11. ENTRYPOINT ["nginx"]
  12. CMD ["-g", "daemon off;"]

alpine

Alpine Linux是一个小型的、独立的开发的非商业 Linux 发行版,专为安全性、效率和易用性而设计。

Alpine Linux,由于它的大小和强大的功能,已经成为官方默认镜像库Docker 提供的镜像。

Dockerfiles - 图1

FROM

The FROM instruction tells Docker which base you would like to use for your image.

即从哪种Linux版本拉取镜像

  1. FROM [--platform=<platform>] <image> [AS <name>]
  2. FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
  3. FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
  4. # FROM --platform=linux/arm64 python:3.7-alpine
  5. https://docs.docker.com/engine/reference/builder/
  6. .dockerignore

LABEL

LABEL指令可用于为图像添加额外信息。

  1. # 查看图像标签
  2. docker image inspect <IMAGE_ID>
  3. # 过滤图像标签
  4. docker image inspect -f {{.Config.Labels}} <IMAGE_ID>

在前面Dockerfiles例子

maintainer=”Russ McKendrick russ@mckendrick.io”:告诉使用者该镜像的维护者

description=”This example Dockerfile installs NGINX.”:镜像的简单描述

RUN

RUN指令用于命令交互

  1. RUN apk add --update nginx && \
  2. rm -rf /var/cache/apk/* && \
  3. mkdir -p /tmp/nginx/

在Alpine Linux主机上运行这三条指令 非本地主机

&&运算符 如果上一个命令成功,则继续执行下一个命令

\ 允许我们将命令拆分为多行,使其更易于阅读

  1. # 使用 Alpine Linux 的包管理器安装 NGINX
  2. apk add --update nginx
  3. # 删除任何临时文件从而使我们的图像大小保持最小
  4. rm -rf /var/cache/apk/*
  5. # 创建一个路径为/tmp/nginx/的文件夹
  6. mkdir -p /tmp/nginx/

COPY and ADD

  1. # 将files文件夹中两个文件复制到本地主机上
  2. COPY files/nginx.conf /etc/nginx/nginx.conf
  3. COPY files/default.conf /etc/nginx/conf.d/default.conf
  4. # ADD自动上传、解压缩并将生成的文件夹和文件添加到选择的路径 并将原有压缩文件删除
  5. ADD files/html.tar.gz /usr/share/nginx/
  6. # ADD指令还可添加来自远程源的内容
  7. ADD https://raw.githubusercontent.com/PacktPublishing/Mastering-Docker-Fourth-Edition/master/chapter02/dockerfile-example/files/html.tar.gz /usr/share/nginx/

EXPOSE

  1. # 每次镜像运行时打开端口80
  2. EXPOSE 80/tcp

ENTRYPOINT and CMD

  1. # 在容器中执行一个默认命令 若运行时添加命令则会覆盖默认命令
  2. ENTRYPOINT [“nginx”]
  3. CMD [“-g”, daemon off;”]
  4. nginx -g daemon off;

其他Docker指令

USER

指定运行命令时使用的用户名

WORKDIR

为一组指令设置工作目录

ONBUILD

存储一组将来使用映像时要使用的指令,作为另一个容器映像的基础映像

  1. # 每次我们的镜像被用作另一个容器镜像的基础时,将会运行更新和包升级
  2. ONBUILD RUN apk update && apk upgrade && rm -rf /var/cache/apk/*

ENV

在构建和执行镜像中设置 ENV

.dockerignore

构建镜像时忽略的文件