Dockerdile指令
[TOC] 构建镜像有两种方式
一、使用 commit
构建镜像
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith
<hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
-a 指定镜像的作者 -m 记录镜像的信息 -p 使用容器构建镜像时,是否暂停容器。
二、使用 dockerfike
构建镜像
构建镜像
docker build -t="指定镜像名"
查看镜像的构建过程
docker history [image]
Dockerdile指令
FROM <image>
FROM <image>
:<tag>
必须是已经存在的镜像 必须是第一条非注释指令
MAINTAINER <name>
指定镜像的作者信息,包含进行的所有者和联系信息
LABEL
功能是为镜像指定标签
RUN
指定当前镜像中运行的命令
RUN <command> (Shell模式)
/bin/sh -c command
RUN [ "executable" , "param1" , "param2" ] ( exec模式 )
RUN ["/bin/bash" , "-c" , "echo hello" ]
EXPOSE <port> [<port>...]
指定运行该镜像的容器使用的端口
只是告诉
docker
运行的时候需要哪些端口,容器运行的时候还需要 -p 命令指定端口映射
CMD
容器运行时默认运行的命令。 运行容器时指定了其他命令, CMD会被覆盖.
CMD command param1 param2 (Shell模式)
CMD[ "executable" , "param1" , "param2" ] ( exec模式 )
CMD[ "param1" , "param2" ] (作为ENTERYPOINT指令的默认参数)
ENTRYPOINT
跟 CMD
命令类似,区别是 ENTRYPOINT
命令不会被 docker run
命令后的指令覆盖,CMD会被覆盖。
ADD
ADD <src>...<dest>
ADD ["<src>"..."<dest>"]
(适用于文件路径中有空格的情况)- ADD包含类似tar的解压功能
COPY
- COPY
<src>...<dest>
COPY["<src>"..."<dest>"]
(适用于文件路径中有空格的情况)- 如果单纯的复制文件,Docker推荐使用COPY
COPY的<src>
只能是本地文件,其他用法一致
VOLUME
设置数据卷
VOLUME ["/data"]
WORKDIR /path/to/workdir
设置工作目录
ENV
设置环境变量
ENV<key><value>
ENV<key>=<value>...
使用env查看
ARG
同ENV一样设置环境变量 如版本号
与ENV的不同之处在于,
- ARG只对镜像起作用, ENV可以在构建出来的容器中使用
env
查看到设置的环境变量 - ARG 在构建镜像的时候可以使用
--build-arg VERSION=2.0.0
(例子) 修改变量 ~~ 使用ipinfo version
查看 ~~
USER
指定为 什么样的用户去运行
USER daemon
ONBUILD [INSTRUCTION]
镜像触发器 当一个镜像被其他镜像作为基础镜像时执行 会在构建过程中插入指令 (PS:假设当前为镜像A,镜像B把镜像A设为基础镜像,在镜像B中构建镜像A中的ONBUILD命令执行才会生效)