Cwww3's Blog

Record what you think

0%

Dockerfile

Dockerfile

  • RUN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RUN apt-get update && apt-get install -y \
aufs-tools \
automake \
build-essential \
curl \
dpkg-sig \
libcap-dev \
libsqlite3-dev \
mercurial \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
s3cmd=1.1.* \
&& rm -rf /var/lib/apt/lists/*
  • CMD
1
2
3
# 多数情况下,CMD 都需要一个交互式的 shell (bash, Python, perl 等),
# 例如 CMD ["perl", "-de0"],或者 CMD ["PHP", "-a"]。
# 使用这种形式意味着,当你执行类似docker run -it python时,你会进入一个准备好的 shell 中。
  • ENV
1
2
3
4
5
6
# 为了方便新程序运行,你可以使用ENV来为容器中安装的程序更新 PATH 环境变量。
# 例如使用ENV PATH /usr/local/nginx/bin:$PATH来确保CMD ["nginx"]能正确运行。

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
  • ADD COPY
1
2
3
4
5
6
7
# 一般优先使用 COPY。因为它比 ADD 更透明。
# ADD的最佳用例是将本地 tar 文件自动提取到镜像中
ADD rootfs.tar.xz
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
  • ENTRYPOINT
1
2
3
4
5
6
# 最佳用处是设置镜像的主命令,允许将镜像当成命令本身来运行,用 CMD 提供默认选项
ENTRYPOINT ["s3cmd"]
CMD ["--help"]

$docker run s3cmd
$docker run s3cmd ls s3://mybucket
  • VOLUMN
1
2
# VOLUME指令用于暴露任何数据库存储文件,配置文件,或容器创建的文件和目录。强烈建议使用 VOLUME来管理镜像中的可变部分和用户可以改变的部分。

  • USER
1
2
3
# 如果某个服务不需要特权执行,建议使用 USER 指令切换到非 root 用户。
# 如果要依赖确定的 UID/GID,你应该显示的指定一个 UID/GID
RUN groupadd -r postgres && useradd -r -g postgres postgres
  • WORKDIR
1
# 为了清晰性和可靠性,你应该总是在WORKDIR中使用绝对路径 替代类似于 RUN cd 
Donate comment here.