Dockerfiles
Dockerfiles只是一个纯文本文件,其中包含一组用户定义的指令。docker image build用于执行Dockerfile文件
FROM alpine:latest
LABEL maintainer="Russ McKendrick <russ@mckendrick.io>"
LABEL description="This example Dockerfile installs NGINX."
RUN apk add --update nginx && \
rm -rf /var/cache/apk/* && \
mkdir -p /tmp/nginx/
COPY files/nginx.conf /etc/nginx/nginx.conf
COPY files/default.conf /etc/nginx/conf.d/default.conf
ADD files/html.tar.gz /usr/share/nginx/
EXPOSE 80/tcp
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
alpine
Alpine Linux是一个小型的、独立的开发的非商业 Linux 发行版,专为安全性、效率和易用性而设计。
Alpine Linux,由于它的大小和强大的功能,已经成为官方默认镜像库Docker 提供的镜像。
FROM
The FROM instruction tells Docker which base you would like to use for your image.
即从哪种Linux版本拉取镜像
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# FROM --platform=linux/arm64 python:3.7-alpine
https://docs.docker.com/engine/reference/builder/
.dockerignore
LABEL
LABEL指令可用于为图像添加额外信息。
# 查看图像标签
docker image inspect <IMAGE_ID>
# 过滤图像标签
docker image inspect -f {{.Config.Labels}} <IMAGE_ID>
在前面Dockerfiles例子
maintainer=”Russ McKendrick russ@mckendrick.io”:告诉使用者该镜像的维护者
description=”This example Dockerfile installs NGINX.”:镜像的简单描述
RUN
RUN指令用于命令交互
RUN apk add --update nginx && \
rm -rf /var/cache/apk/* && \
mkdir -p /tmp/nginx/
在Alpine Linux主机上运行这三条指令 非本地主机
&&运算符 如果上一个命令成功,则继续执行下一个命令
\ 允许我们将命令拆分为多行,使其更易于阅读
# 使用 Alpine Linux 的包管理器安装 NGINX
apk add --update nginx
# 删除任何临时文件从而使我们的图像大小保持最小
rm -rf /var/cache/apk/*
# 创建一个路径为/tmp/nginx/的文件夹
mkdir -p /tmp/nginx/
COPY and ADD
# 将files文件夹中两个文件复制到本地主机上
COPY files/nginx.conf /etc/nginx/nginx.conf
COPY files/default.conf /etc/nginx/conf.d/default.conf
# ADD自动上传、解压缩并将生成的文件夹和文件添加到选择的路径 并将原有压缩文件删除
ADD files/html.tar.gz /usr/share/nginx/
# ADD指令还可添加来自远程源的内容
ADD https://raw.githubusercontent.com/PacktPublishing/Mastering-Docker-Fourth-Edition/master/chapter02/dockerfile-example/files/html.tar.gz /usr/share/nginx/
EXPOSE
# 每次镜像运行时打开端口80
EXPOSE 80/tcp
ENTRYPOINT and CMD
# 在容器中执行一个默认命令 若运行时添加命令则会覆盖默认命令
ENTRYPOINT [“nginx”]
CMD [“-g”, “daemon off;”]
nginx -g daemon off;
其他Docker指令
USER
指定运行命令时使用的用户名
WORKDIR
为一组指令设置工作目录
ONBUILD
存储一组将来使用映像时要使用的指令,作为另一个容器映像的基础映像
# 每次我们的镜像被用作另一个容器镜像的基础时,将会运行更新和包升级
ONBUILD RUN apk update && apk upgrade && rm -rf /var/cache/apk/*
ENV
在构建和执行镜像中设置 ENV
.dockerignore
构建镜像时忽略的文件