0%

Docker 学习基础(2) —Dockerfile

Dockerfile

今天带来dockerfile的第二篇文档————Dockerfile,Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们可以用java的源码和class文件进行类比,如果我们将image文件比做为一个个类文件,那么Dockerfile就可以看成是源码文件。当我们在Dockerfile文件中写好我们希望构建的镜像之后,可以使用docker build来读取Dockerfile中的指令构建我们的镜像。

一. Dockerfile相关指令以及build指令

  • FORM 基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER 镜像维护者的姓名和邮箱
  • RUN 容器构建时需要运行的命令
  • EXPOSE 当前容器对外暴露出的端口
  • WORKDIR 指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
  • ENV 用来在构建镜像过程中设置环境变量
  • ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY 类似ADD,拷贝文件和目录到镜像中,注意这个不会解压
  • VOLUME 容器数据卷,用于数据保存和持久化操作
  • CMD 指定一个容器启动时要运行的命令,dockerfile可以有多个cmd,但是只有最后一个生效
  • ENTRYPOINT 指定一个容器启动时要运行的命令,不会被覆盖,会追加
  • ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild会被触发,类似于一个触发器

build指令解释如下:

1
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配置。
  • –tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • –network: 默认 default。在构建期间设置RUN指令的网络模式

下面我们举一个例子来构建自己的dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
FROM contos

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

CMD echo $MYPATH
CMD echo "success-------ok"
CMD /bin/bash

这里我们引入原始的centos镜像,然后设置工作路径为 /usr/local,并在这个linux系统中装入vim和net-tools组建,最后我们输出我们的工作路径和success。

使用build指令进行镜像构建

1
docker build -f /mydocker/DockerFile -t mycentos:1.3 .

这里我遇到了一个坑,就是我是在根目录下构建的images,就会出现问题

1
Error checking context: 'no permission to read from'/proc/sys/net/ipv4/route/flush''.

这里我们一定不要在根目录下进行build操作。

最终结果就是成功构建,我们使用docker images 可以看到:
upload successful

二. 参考文献

尚硅谷docker核心技术
docker官方文档
docker build 命令 菜鸟教程