前言
恰逢时,不理解Dockefile 和docker build , 在此记录学习一下。
参考链接
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:用于设置镜像触发器
最后用一张图解释常用指令的意义-
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指令的网络模式