概念
创建docker image的时候,使用docker build命令。该命令通过读取dockerfile文件,完成image的创建工作。
dockerfile文件包含创建image的指令
创建image的指令无非以下几种:
- 拷贝类。从宿主机把文件拷贝到image中
- 执行类。执行image环境中的某些命令
- 设置类。设置image的参数
- 辅助类。比如往docker build传递参数等
一个基本的dockerfile文件:
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"]
docker build使用dockerfile:
docker build -f /path/to/a/Dockerfile .
FROM指令
docker本身类似于虚拟机,创建image时,要指定一个已有的image,在其基础上创建。已有的image往往是某个操作系统,或者包含操作系统的image。
一个dockerfile往往只能创建一个image。但也可以创建多个image,一段创建image的指令叫做build stage。build stage之间通过FROM分割
ARG CODE_VERSION=latest FROM base:${CODE_VERSION} CMD /code/run-app FROM extras:${CODE_VERSION} CMD /code/run-extras
拷贝类指令
- WORKDIR。指令image中的路径
- ADD。往image拷贝内容
- COPY。往image拷贝内容,和ADD类似,有些细微差别,ADD与COPY相比,主要推荐使用COPY。ADD仅在解压tar包到目标路径时具备优势
执行类指令
- RUN。运行image中的某个程序,比如apt-get安装依赖库
设置类指令
- CMD。设置container启动时,自动运行的程序
- ENTRYPOINT。和CMD一样,不过灵活性更大,可以从宿主机读取参数
- LABEL。设置一些信息标签,仅供读者查看
- EXPOSE。描述image暴露的端口
- ENV。设置image中的环境变量,可以被运行的app获取
- VOLUME。设置image的volume路径
- USER。设置RUN, COPY等命令的用户和组,默认是root
- STOPSIGNAL。设置container关闭时,往app发送的信号
- HEALTHCHECK。设置container的健康检查机制
- SHELL。设置RUN, CMD等使用的shell
辅助类
- ARG。在build iamge过程中,通过命令行传递参数
- ONBUILD。类似于模版,设置一些本image不会执行,但是基于本image构建的子image会执行的命令
发表回复