在之前的教程里,我们展示了2种获得镜像的方法:一种是直接从Docker store上面pull,一种是先运行一个容器,然后从容器提交获得镜像。今天,我们来看另一种更优秀的私人定制定制Docker镜像的方法——Dockerfile。 Dockerfile是一种包含了构建镜像指令的文本文档。下面我们来看一个简单的例子吧:
创建一个新目录docker并切换到该目录: mkdir docker cd docker/ 在docker目录下,创建一个Dockerfile(名字必须是这个): touch Dockerfile 使用vim编辑Dockerfile: vim Dockerfile添加如下内容:
FROM ubuntu:16.04 MAINTAINER *@gmail.com RUN apt-get update RUN apt-get install net-tools CMD [“echo”,”Image created”]
build sudo docker build -t myimage:v0.1 .-t 表示添加镜像名字和标签,点号“.”表示构建当前目录。 完成后我们就获得了一个新的镜像。
在第一小节中展示了一个Dockerfile的简单示例,现在我们来看更多的命令。详细内容参见Docker官方网站。 更多实际操作的例子参见Best Practices for Writting Dockerfiles。
命令作用示例备注FROM指定从某个基础镜像开始构建FROM ubuntu:16.04Dockerfile必须从FROM开始,FROM可以在一个Dockerfile里面出现多次,但是后面的FROM会清空前面FROM的状态RUN执行指令RUN apt updateRUN后的状态会影响之后的构建;CMDCMD [“executable”,”param1”,”param2”]MAINTAINER指定维护者MAINTAINER EMAILEXPOSE指定容器监听那些端口EXPOSE {port}EXPOSE并没有指定暴露哪些端口,你仍然需要使用 -p 参数指定ENV设定环境变量ENV {key}{value};ENV {key}={value}ADD从参数src复制文件、目录或者远程文件到镜像的目标路径ADD {src}{des}ENTERPOINT这个命令允许你设置一些在容器运行时需要执行的命令ENTERPOINT [“executable”, “param1”, “param2”]VOLUMEVOLUME [“/data”]USER设置用户名和组USER [user][:(group)] or USER [UID][:(GID)]WORKDIR设置紧随其后的RUN,CMD,ADD,COPY等命令的执行目录WORKDIR /path/to/workdir/ARG设置了在build时可传入的参数ARG [name][=(default value)]ESCAPE设置转义字符ESCAPE=`在win系统很有用,避免了\和/的混乱注意事项: Dockerfile中每条指令之间是相互独立的。就比如:
RUN cd workspace/ RUN pwd你得到的并不是workspace,你需要使用WORKDIR设置路径。 当然,有些指令比如apt update是可以保留一些缓存供后续的指令使用的。注意一下就好了。
本文主要介绍了如何使用Dockerfile构建自己的私人镜像。下一节将会介绍怎样分享你的镜像。
