基本示例
- FROM
- MAINTAINER
- LABEL
- RUN
- ADD
- COPY
- CMD
- ENTRYPOINT
- ENV
- EXPOSE
- VOLUME
- WORKDIR
- USER
- ARG
基本示例
- # This is a commit
- FROM alpine:3.2
- MAINTAINER Jasper Xu <sorex@163.com>
- RUN apk update && apk add socat && rm -r /var/cache/
- RUN chmod -R 755 /data
- ADD execfile /etc/execfile
- ADD data/* /etc/data/
- COPY xxx.tgz /home/xxx.tgz
- RUN chmod 755 /etc/execfile
- RUN ["/etc/execfile", "arg1", "arg1"]
- ENV abc=hello
- VOLUME ["/data"]
- EXPOSE 8080
- WORKDIR /data/tools
- CMD service nginx start
- CMD echo "Hello docker!"
- FROM
必须为第一个命令, 指定基础镜像
- FROM <image>
- FROM <image>:<tag>
- FROM <image>@<digest>
- FROM mysql:5.6
- MAINTAINER
维护者信息
- MAINTAINER <name>
- MAINTAINER Jasper Xu
- MAINTAINER sorex@163.com
- MAINTAINER Jasper Xu <sorex@163.com>
- LABEL
给镜像添加信息使用 docker inspect 可查看镜像的相关信息
- LABEL "com.example.vendor"="ACME Incorporated"
- LABEL com.example.label-with-value="foo"
- LABEL version="1.0"
- LABEL description="This text illustrates that label-values can span multiple lines."
- RUN
构建镜像时执行的命令
- # 由 shell 启动, Linux 默认为 `/bin/sh -c`,Windows 默认为 `cmd /S /C`
- RUN <command>
- # 运行可执行文件
- RUN ["executable", "param1", "param2"]
- RUN apk update
- RUN ["/etc/execfile", "arg1", "arg1"]
- ADD
将本地文件添加到容器中, identity, gzip, bzip2,xz,tar.gz,tgz 等类型的文件将被添加 tar -x 命令, 进行解压
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
- ADD hom* /mydir/ # 添加所有以 "hom" 开头的文件
- ADD hom?.txt /mydir/ # ? 替代一个单字符, 例如:"home.txt"
- ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
- ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
- COPY
同 ADD, 只是不会解压文件
CMD
构建容器后调用, 也就是在容器启动时才进行调用
- CMD ["executable","param1","param2"] (执行可执行文件, 优先)
- CMD ["param1","param2"] (设置了 ENTRYPOINT, 则直接调用 ENTRYPOINT 添加参数)
- CMD command param1 param2 (执行 shell 内部命令)
- CMD echo "This is a test." | wc -
- CMD ["/usr/bin/wc","--help"]
- ENTRYPOINT
配置容器, 使其可执行化配合 CMD 可省去 "application", 只使用参数
- ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
- ENTRYPOINT command param1 param2 (shell 内部命令)
- FROM ubuntu
- ENTRYPOINT ["top", "-b"]
- CMD ["-c"]
当启动容器后, 你将直接看到相当于运行了 top -b -c
要进一步查看, 你可以直接使用命令
docker exec -it test ps aux
相当于使用了
- docker exec top -b -it test ps aux
- ENV
设置环境变量
- ENV <key> <value>
- ENV <key>=<value> ...
- ENV myName="John Doe" myDog=Rex\ The\ Dog myCat=fluffy
等同于
- ENV myName John Doe
- ENV myDog Rex The Dog
- ENV myCat fluffy
- EXPOSE
指定于外界交互的端口, 在容器启动时用 - p 传递参数, 例如 - p 3307:3306 将容器内的 3306 绑定到本机的 3307
- EXPOSE <port> [<port>...]
- EXPOSE 80 443
- EXPOSE 8080
- VOLUME
用于指定持久化目录, 在容器启动时用 - v 传递参数, 例如
-v ~/opt/data/mysql:/var/lib/mysql
将本机的~/opt/data/mysql 和容器内的 / var/lib/mysql 做持久化关联
容器启动时会加载, 容器关闭后会回写
- VOLUME ["/data"]
- VOLUME ["/data"]
- VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
- WORKDIR
工作目录
- WORKDIR /path/to/workdir
- WORKDIR /a (这时工作目录为 / a)
- WORKDIR b (这时工作目录为 / a/b)
- WORKDIR c (这时工作目录为 / a/b/c)
- USER
用于设定容器的运行用户名或 UID,USER 123 或 USER git
RUN, CMD and ENTRYPOINT 都将用该用户执行
ARG
由外部启动时必须传入的参数, 在容器启动时用 --build-arg 传递参数
指定于外界交互的端口, 在容器启动时用 - p 传递参数, 例如
- --build-arg CONT_IMG_VER=v2.0.1
- FROM ubuntu
- 2 ARG CONT_IMG_VER
- 3 ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
- 4 RUN echo $CONT_IMG_VER
有些默认参数, 无需指定, 也不用使用 `` 传递, 可直接传参
HTTP_PROXY,http_proxy,HTTPS_PROXY,https_proxy,FTP_PROXY,ftp_proxy,NO_PROXY,no_proxy
来源: http://www.bubuko.com/infodetail-2520789.html