0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Dockerfile]RUN命令での set -e に意図はあるのか?

Posted at

Dockerfile 眺めていると、1つのRUN命令で複数の処理を記載する際に2通りの記載があります。
下記のpythonイメージのDockerfileの例だと、

①処理を && で繋げるだけのパターン

# make some useful symlinks that are expected to exist
RUN cd /usr/local/bin \
	&& ln -s idle3 idle \
	&& ln -s pydoc3 pydoc \
	&& ln -s python3 python \
	&& ln -s python3-config python-config

②set -ex で開始して && で繋げるパターン

RUN set -ex \
	\
	&& wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \
	&& wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \
	&& export GNUPGHOME="$(mktemp -d)" \
・
・
・
	&& ldconfig \
	\
	&& python3 --version

どう使いわけるんでしょうか?

①処理を && で繋げるだけのパターン

こちらについては、シェルの && 演算子で繋げていって、
処理が成功(exit 0)すれば順次処理していく形か。

②set -ex で開始して && で繋げるパターン

こちらについても、処理成功で次処理を実行していきたいという意図は同じ。
set の -x オプションはデバッグ用途?長いRUN命令書いている際に便利なのだろうか。
set の -e オプションは non-zero で終了した際に停止したい場合。
ん? && で事足りるのでは?
RUN 失敗すれば docker build も停止するので、Dockerfileの1つのRUN命令内においてのでの set -e 有無は意味をなさない気がする。
好みの問題?

https://stackoverflow.com/questions/47143319/what-does-set-x-do-in-dockerfile
https://stackoverflow.com/questions/50319492/difference-between-and-set-ex-in-dockerfiles

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?