😃

dockerfile設定コマンド■USER■VOLUME■WORKDIR

2021/02/10に公開

はじめに

くーばねてすをやっつけるためにこれまでにLinuxさんとAWSさんと仲良くさせていただいたが、新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。
今回はdockerさんでコンテナを開発して、くーばねてすでの構築の基礎的な部分を理解する。

概要

■dockerfileのコマンド
■USER
■VOLUME
■WORKDIR

をまとめた!(^_-)-☆

■dockerfileのコマンド

dockerfile命令(コマンド)、意味ざっくり
|コマンド|意味|
| --- | --- | --- |
|FROM イメージ:タグ|コンテナのベースイメージ|
|RUN コマンド|FROMのベースイメージで実行するコマンド|
|ADD ソース コンテナ内宛先|ソースをコンテナ内宛先へコピーする|
|ENTRYPOINT |コンテナが実行するファイルを指定する|
|CMD|コンテナの実行時に実行されるコマンドを指定する|
|ENV key=Value|環境変数をセットする|
|EXPOSE port|公開ポートを設定する|
|USER ユーザ名|RUN,CMD,ENTRYPOINTの実行ユーザを指定する|
|VOLUME["/path"]|共有可能なボリュームをマウントする|
|WORKDIR /path|RUN,CMD,ENTRYPOINT,COPY,ADDの作業ディレクトリを指定する|
|ARG <名前>[=<デフォルト値>]|ビルド時の引数を定義する--bid-arg<引数>=<値>|
|LABEL key=value key=value|イメージのメタデータにラベルを追加する|
|MAINTAINER<名前>|イメージのメタデータに製作者を追加する|
ルールがたくさんある!('_')

dockerfileはGO言語で記述する。

■USER

USERコマンドはRUN,CMD,ENTRYPOINTの実行ユーザーを指定するコマンドだ。
USERコマンドは指定しなければ、root権限で実行されるのだが、USER を使うことにより非 root ユーザで実行することができる。
ここではユーザーの指定だけなので、ユーザーを使用できるようにするには、RUNコマンドでユーザーを追加する。

RUNコマンドでユーザーを追加する
USER ユーザー名
RUN useradd -r ユーザー名

面倒くさかったらこれでもいいらしい

$ docker run -u ユーザー名 イメージ名 

■VOLUME

VOLUMEコマンドは共有可能な永続ボリュームをマウントするコマンドだ。
データベース・ストレージ領域、設定用ストレージ、Docker コンテナによって作成されるファイルやフォルダの公開のためにボリュームを指定する。
イメージにおいて変わりやすい作業スペース・ユーザによって便利な保管場所として VOLUME が使用されることが多い。
永続ボリュームはホスト側の /var/lib/docker/volumes などを指定する。
docker run の -v オプションでは 「-v ボリューム名:マウントポイント」 でボリューム名を指定することができるが、VOLUME ではパス(マウントポイント)でしか指定することはできず、名前付きボリュームを割り当てることはできない。
VOLUME でマウントしたボリュームは、df コマンドに -a オプションをつけないと表示されないことがある。

dockerfile
VOLUME /var/disk1 /var/disk2 /var/disk3

または

docker run時にボリュームと名前指定
$ docker run -v testvolume:/var/lib/docker/volumes ...

これで永続ボリュームを指定できる。

■WORKDIR

WORKDIRコマンドはコンテナが起動された時のRUN、CMD、ENTRYPOINT、COPY、ADDの作業ディレクトリを指定することができる。作業ディレクトリを指定しつつ同時にディレクトリの作成もされる。

dockerfile
WORKDIR /パス
こんな書き方もあるぞ
WORKDIR /A
WORKDIR B
WORKDIR C
RUN pwd

分割して書けるんだね
$ pwd
/A/B/C

ENVで設定した環境変数を展開することもできる。

dockerfile
ENV BASE_DIR=/opt/myapp
WORKDIR $BASE_DIR/tmp

まとめ

/⌒ヽ
   / ・ω・
 _ノ ヽ ノ \_
/ / ⌒Y⌒ Y ヽ
(  (三ヽ人  /  |
| ノ⌒\  ̄ ̄ヽ  ノ
ヽ___>、__
   |( 王 ノ〈
   /ミ`ー―彡ヽ
  / ヽ
/  |
  |  /お疲れ! ズラ

Discussion