1.Dockerfile
包含创建镜像所需要的全部指令。基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
Dockerfile支持的语法命令如下:
INSTRUCTION argument
指令不区分大小写,但是命名约定为全部大写
2.FROM
所有Dockerfile命令必须以FROM命令开始。FROM命令指定镜像基于哪个基础镜像创建。接下来的命令也会基于这个基础镜像。可以使用多次FROM命令,表示会创建多个镜像。
FROM [image] FROM [image]:[tag] FROM [image]@[digest]
eg:FROM centos 这个指令告诉我们,新的镜像将基于centos的镜像来构建。
3.MAINTAINER
设置该镜像的作者
MAINTAINER [author name]
4.RUN
在shell或execl环境下执行的命令。会在新创建的镜像上添加新的层面,接下来提交的镜像用在Dockerfile的下一条指令中。
RUN [command] shell form RUN ["executable", "param1", "param2"] exec from exec形式没有变量扩展,如RUN ["echo", "$HOME"] 不会展开$HOME,需要改成 RUN ["sh", "-c", "echo", "$HOME"]
5.ADD
复制文件指令,将URL或者启动配置上下文的一个文件复制到容器内的位置
ADD [src] [destination]
6.CMD
所提供了容器默认的执行命令。Dockerfile只允许使用一次CMD指令,使用多个CMD会抵消之前所有的指令,只有最后一个指令失效
CMD ["executable", "param1", "param2"] CMD ["param2", "param2"] CMD command param1 param2 CMD ["executable", "param1", "param2"]是推荐使用的格式。exec from被解析成JSON数组,因此不能使用单引号,要使用双引号。
7.EXPOSE
指定容器在运行时监听的端口
EXPOSE [port]
8.ENTRYPOINT
配置给容器一个可执行的命令,这意味着每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。类似与CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令。
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2
9.WORKDIR
指定RUN、CMD、ENTRYPOINT命令的工作目录
WORKDIR /path/to/workdir
10.ENV
设置环境变量,使用键值对,增加运行程序的灵活性
ENV [key] [value]
11.USER
镜像正在运行时设置一个UID
USER [uid]
12.VOLUME
授权容器访问主机上的目录
VOLUME ["/data"]
Dockerfile举例如下:
# Nginx # # VERSION 0.0.1 FROM ubuntu MAINTAINER Victor Vieux [victor @docker.com] #因编辑器原因,此行方括号应为尖括号 LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0" RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server # Firefox over VNC # # VERSION 0.3 FROM ubuntu # Install vnc, xvfb in order to create a 'fake' display and firefox RUN apt-get update && apt-get install -y x11vnc xvfb firefox RUN mkdir ~/.vnc # Setup a password RUN x11vnc -storepasswd 1234 ~/.vnc/passwd # Autostart firefox (might not be the best way, but it does the trick) RUN bash -c 'echo "firefox" >> /.bashrc' EXPOSE 5900 CMD ["x11vnc", "-forever", "-usepw", "-create"] # Multiple images example # # VERSION 0.1 FROM ubuntu RUN echo foo > bar # Will output something like ===> 907ad6c2736f FROM ubuntu RUN echo moo > oink # Will output something like ===> 695d7793cbe4 # You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with # /oink.
未经允许不得转载:SRE空间 » docker入门-Dockerfile详解