通过Dockerfile可以构建Docker的镜像,并启动一个容器。
Dockerfile的格式都是如下格式:
[指令] [参数]
指令忽略大小写,但是建议使用大写。
下面介绍Dockerfile的几个重要指令.
1.FROM
FROM <image>
或者
FROM <image>:<tag>
设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。
举例:
FROM ubuntu
2.RUN
RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。
两种格式:
RUN <command> (the command is run in a shell - `/bin/sh -c`)
或:
RUN ["executable", "param1", "param2" ... ] (exec form)
RUN命令等价于:
docker run image command
docker commit container_id
3.ENTRYPOINT
有两种语法格式,一种就是上面的(shell方式):
ENTRYPOINT cmd param1 param2 ...
或者:
第二种是 exec 格式:
ENTRYPOINT ["cmd", "param1", "param2"...]
举例:
ENTRYPOINT ["echo", "Whale you be my container"]
一个完整使用ENTRYPOINT的例子:
root@justin:~# cat Dockerfile
FROM ubuntu
ENTRYPOINT echo "Welcome!"
root@justin:~# docker run 62fda5e450d5
Welcome!
4. USER
指定应用的运行用户
比如指定 mysql 的运行用户,可以使用上面的 ENTRYPOINT 来实现:
ENTRYPOINT ["mysql", "-u", "justin"]
更好的方式是:
ENTRYPOINT ["mysql"]
USER justin
5.EXPOSE
EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外。
格式:
EXPOSE <port> [<port>...]
举例:
EXPOSE 11211
一个完整的例子:
# Memcached
#
# VERSION 2.2
# use the ubuntu base image provided by dotCloud
FROM ubuntu
MAINTAINER Victor Coisne victor.coisne@dotcloud.com
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# install memcached
RUN apt-get install -y memcached
# Launch memcached when launching the container
ENTRYPOINT ["memcached"]
# run memcached as the daemon user
USER daemon
# expose memcached port
EXPOSE 11211
6.ENV
用于设置环境变量
ENV <key> <value>
设置了后,后续的RUN命令都可以使用
使用此dockerfile生成的image新建container,可以通过 docker inspect 看到这个环境变量:
root@tankywoo-docker:~# docker inspect 49bfc7a9817f
...
"Env": [
"name=tanky",
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
...
7.VOLUME
格式:
VOLUME ["<mountpoint>"]
举例:
VOLUME ["/data"]
8.CMD
有三种格式:
CMD ["executable","param1","param2"] (like an exec, preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效。
9.WORKDIR
WORKDIR /path/to/workdir
配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径
可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令
比如:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
工作在/a/b/c下面
10.MAINTAINER
MAINTAINER命令用来指定维护者的姓名和联系方式
MAINTAINER justin justin@dotcloud.com
11.#
#代表注释