前言

恰逢时,不理解Dockefile 和docker build , 在此记录学习一下。

参考链接

  1. 菜鸟教程 Dockefile 介绍
  2. Dockerfile文件详解
  3. Dockerfile介绍

1. Dockerfile 简介

1.1 定义

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

1.2 基本结构

一般分为四部分:

  • 基础镜像信息、
  • 维护者信息、
  • 镜像操作指令
  • 容器启动时执行指令

’#’ 为 Dockerfile 中的注释。
例如

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..

# Base image to use, this must be set as the first line
FROM ubuntu

# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com

# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# Commands when creating a new container
CMD /usr/sbin/nginx

1.3 文件说明

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM
常用的一些指令:

  • FROM : 指定基础镜像
  • MAINTAINER: 维护者信息
  • RUN :构建镜像时执行命令
  • ADD: 将本地文件添加到容器中,tar 类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
    ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)
  • COPY : 复制指令,从上文目录中复制文件活目录到容器里指定路径
  • CMD : 构建容器后调用,也就是在容器启动时才进行调用
  • ENV :设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
  • EXPOSE :仅仅只是声明端口。
  • USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
  • ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
  • LABEL:用于为镜像添加元数据
  • VOLUME:用于指定持久化目录
  • WORKDIR:工作目录,类似于cd命令
  • ONBUILD:用于设置镜像触发器

最后用一张图解释常用指令的意义-

created不对 docker images dockerfile build_dockerfile

1.4 创建镜像

编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。

2. docker build 命令

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

docker build 命令用于使用 Dockerfile 创建镜像。

  • 语法: 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指令的网络模式