build
从Dockfile建立镜像
docker build -t <repo>:<tag> .
FROM
指定base镜像
FROM python:2.7 # 指定基础镜像为python2.7
ENV
定义环境变量
例子:
ENV PORT 9000
ENV HOST=“127.0.0.1”
CMD echo ${PORT} ${HOST}
RUN
在当前image的新layer上执行命令,然后提交结果为一个新的image。有两种形式:shell形式和exec形式。
一个shell形式例子:
RUN git clone https://github.com/taku910/crfpp.git && \
cd crfpp/ && ./configure && \
sed -i '/#include "winmain.h"/d' crf_test.cpp && \
sed -i '/#include "winmain.h"/d' crf_learn.cpp && \
make install && \
echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc
CMD
对正在执行的容器提供默认命令。默认的命令在docker run <cmd>
时会被重写。
例子:
CMD echo "This is a test."
注意:
- 如果你想启动一个server,这里的命令一定不能是nohup执行
LABEL
给镜像添加元信息
LABEL maintainer例子:
LABEL maintainer="wangjiang@datagrand.net"
EXPOSE
通知docker在容器运行时监听特定的网络端口。这条指令实际并不publish端口,它只是作为镜像创建者和容器运行者关于该publish哪个端口的文档
例子
EXPOSE 80
COPY
把本机文件目录拷贝到镜像
例子:
copy . /code # 把当前目录所有内容添加到镜像内/code目录下
ADD
把本地或远程文件目录拷贝到镜像
例子:
add . /code # 把当前目录所有内容添加到镜像内/code目录下
注意:
- ADD和COPY的区别在于:ADD使用的范围更广,它可以拷贝一个http链接文件,并帮你解压;
- 避免在COPY能够满足你需求的情况下使用ADD,因为它可能会出现一些你不期望看到的结果,比如ADD一个压缩文件的时候。
ENTRYPOINT
让容器以应用程序或者服务的形式运行。它和CMD命令比较类似。它指定的命令在docker run <cmd>
时仍会被执行
VOLUMN
将主机某个目录挂载到镜像内部。它只能指定镜像目录,所以不建议使用;挂载可以在生成容器时(docker run)使用-v
选项实现,它可以指定主机目录和容器目录。
VOLUMN /data # 将主机某个目录挂载到镜像的/data目录下
可以使用docker inspect
查看主机目录。