Docker镜像文件与仓库(二)
Docker镜像文件与仓库(二)
Dockerfile指令
Dockerfile格式:
1.#Comment注释
2.INSTRUCTION大写的指令名 argument参数
- FROM
1.FROM <image>
2.FROM <image>:<tag>
3.#通过FROM指定的镜像名都必须是已经存在的镜像,这个镜像叫做基础镜像,而且必须是第一条非注释指令
- MAINTAINER
1.MAINTAINER <name>
2.#指定镜像的作者信息,包含镜像的所有者和联系信息
- RUN
1.#指定当前镜像中运行的命令
2.RUN <command> (shell模式)
3. /bin/sh -c command
4. 比如 RUN echo hello
5.RUN ["executable","param1","param2"] (exec模式)
6. 比如 RUN ["/bin/bash","-c","echo hello"]
- EXPOSE
1.EXPOSE <port> [<port>...]
2.#指定运行该镜像文件的容器使用的端口,但是我们在运行容器的时候仍然要指定端口,因为dockerfile写的端口只是为了告诉docker这个容器在运行的时候可能会使用哪些端口
3.docker run -p 80 -d test nginx -g "daemon off;"
- CMD
1.CMD ["executable","param1","param2"] (exec模式)
2.CMD command param1 param2 (shell模式)
3.CMD ["param1","param2"] (作为ENTRYPOINT指令的默认参数)
4.#CMD指令是用来指定容器启动时的默认情况
- ENTRYPOINT
1.ENTRYPOINT ["executable","param1","param2"] (exec模式)
2.ENTRYPOINT command param1 param2 (shell模式)
3.#CMD能被覆盖,而ENTRYPOINT不会
- ADD
1.ADD <src>...<dest>
2.ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
- COPY
1.COPY <src>...<dest>
2.COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
ADD vs. COPY:
- ADD包含类似tar的解压功能
-
如果单纯复制文件,Docker推荐使用COPY
- VOLUME
1.VOLUME ["/data"]
2.#卷,对于文件共享来说
- WORKDIR
1.WORKDIR /path/to/workdir
2.#为后面的指令指定工作目录
- ENV
1.ENV <key> <value>
2.ENV <key>=<value> ...
3.#用来设置环境变量
- USER
1.USER daemon
2.#指定镜像文件为什么样的用户运行
3. USER user
4. USER user:group
5. USER user:gid
6. USER uid
7. USER uid:gid
8. USER uid:group
9.#默认使用root用户
- ONBUILD
1.ONBUILD [INSTRUCTION]
2.#能够为镜像添加触发器
3.#当一个镜像被其他镜像作为基础镜像时执行
4.#会在构建过程中插入指令
Dockerfile构建过程
- 从基础镜像运行一个容器
- 执行一条指令,对容器做出修改
- 执行类似docker commit的操作,提交一个新的镜像层
- 再基于刚提交的镜像层运行一个新容器
- 执行Dockerfile中的下一条指令,直至所有指令执行完毕
使用中间层镜像进行调试的好处:
查找错误
构建缓存:能使下一次启动时速度加快
如果想不使用缓存:docker build --no-cache
对Dockerfile进行修改,然后启动的时候就从修改的地方开始刷新缓存
查看镜像构建的过程:docker history [image]