RUN
Dockerfileを記述する際の命令の一つにRUNがある。これはコマンドの実行を命令するものである。
以下のコードではDockerfileを一部抜粋している。これはrailsアプリのDockerfileの一部で、rails6ではWebpackerがjavascriptの標準コンパイラとなるので、Webpackerのインストールに必要なyarnとnodejsをインストールし、その他画像処理に必要なimagemagickやデータベースのmysqlのサーバーとクライアントをインストールしているという内容である。
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs \
&& apt-get update -qq \
&& apt-get -y install \
yarn \
nodejs \
imagemagick \
default-mysql-server \
default-mysql-client
ここで書かれている記述について以下にいくつかメモをしておく。
curl
client for url。URLに書かれている先とデータのやり取りを行う。 -sS というのは、 -s(実行時に表示される様々なメッセージを表示しない)というオプションと、 -S (エラーメッセージを表示する)というオプションの二つが組み合わさったもので、実行時にエラーメッセージがあればそれのみを表示する設定となる。逆にエラーメッセージ以外は表示しない。
ここではhttps://dl.yarnpkg.com/debian/pubkey.gpg
というURLから公開鍵をインポートする目的でcurlが使われる。
|
パイプと呼ばれる記号。curlを使ってURLから取得した標準出力のデータを標準入力として次のコマンドに渡している。
apt-key add -
aptはDebian系OSで使われるパッケージ管理コマンド。 key addは信頼キーリストに新たなキーを追加するコマンドで、addの後の - は先程のcurlのURLからの標準入力のデータをそのまま標準入力として使うという意味。(apt-key listを実行すれば信頼キーのリストを表示できる。)
ただしこのコマンドは現在非推奨となっており、これに代替するコードは調べたら結構出てくる。(個人的にも何か記事を書ければと思う)ここではyarnレポジトリを有効化するために、yarnレポジトリのGPGキーをリストに追加している。
&&
前のコマンドが成功したら後ろのコマンドを実行するというSQLで言うところのAND的な役割を持つリナックスコマンド。
echo〜tee
echoは文字列を表示するリナックスコマンド。teeは標準入力として受け取った内容をファイルに書き出すコマンド。ここではdeb https://dl.yarnpkg.com/debian/ stable main
という文字列を/etc/apt/sources.list.d/yarn.list
というファイルに書き出している。これにより、公開されているyarnのレポジトリのソースをリストに追加している。
apt-get update
先程のecho〜teeにでリストに追加されたURLからパッケージファイルを
/var/lib/apt/lists
に格納している。これによりパッケージファイルのインストールができるようになる。-qqはエラー以外は表示しないというオプション
apt-get install
パッケージのインストールを行う。-yは質問に全てyesと答えるオプション。
\
バックスラッシュはコードを複数行に分ける。コードの可読性を高める。
default-mysql-server default-mysql-client
ここについては一応補足。これをmysql-server、mysql-clientと書いてあるコードも見かけるが、DockerのベースイメージがDebian10以降だとexit code: 100
というエラーが出てしまうようなのでお気をつけて。