Docker run時に指定できる基本的なオプションの紹介をします。
ファイルシステムの共有
コンテナをあまり大きくしないようにするためになるべくコンテナ側にファイルをおかないようにすることが重要です。そういった時にホストのファイルをコンテナにマウントすることができる-vオプションを使います。書き方は下記の通りです。
-v オプションの指定の仕方
-v <host>:<container>
ex.ホストの~/Desktop/to_containerフォルダをコンテナ側の/host_folderフォルダへマウントする場合
docker run -it -v ~/Desktop/to_container:/host_folder <image> bash
※コンテナ側のhost_folderはDockerfileでRUN mkdierを記述してディレクトリを作成しておかなくても共有先のディレクトリに指定するだけで作成してくれます。
ファイルへのアクセス権限 [-u]
ファイルシステムを共有することによってコンテナからホストのファイルシステムにアクセスできるようになります。コンテナは特に指定しない場合はrootで実行している状態になります。
そのままホスト側にアクセスするとよろしくないのでアクセス権限を設定する必要があります。
自分のユーザid、ユーザグループを指定して実行ユーザを指定してコンテナを実行するとroot権限以外のユーザでコンテナ内を操作することができるようにコンテナを作成することができます。
-u オプションの指定の仕方
-u 501:20
ただこのように毎回ユーザid,ユーザグループを調べてコマンドを実行するのは面倒なので、ユーザid,グループを実行してrunできるように記述すると便利です。
-u $(id -u):$(id -g)
$()のなかにlinuxコマンドを入れるとその実行結果を使用してコマンドを実行してくれます。実際にrunしてbashを実行すると下記のようにユーザが表示されていると思います。
I have no name!@<serial>
コンテナ上に501などのユーザがないことが原因ですので、適宜ユーザを作成しておくと正しいユーザ名で表示されるようになります。
※自分のパソコン内だけで実行する場合は、それほどナーバスになる必要もない部分だと思いますが、共有環境な内で実行する場合などに有効なオプションです。。
ポートをつなげる
コンテナを複数立てる場合、ホストのポートとコンテナのポートを紐づけておかないとアクセスできません。
記述方法は今まで紹介したものとあまり変わらず、下記の通りです。
-p オプションの指定の仕方
-p <hostのポート>:<containerのポート>
コンピュータリソースの上限の設定
ホストのCPU、メモリを使い切らないように設定しないとリソースが枯渇することがおきます。そうならないための上限設定のオプションが存在します。
オプションの指定の仕方
-cpus <コア数> --memory <メモリ容量byte>
ex.2つのコア、4Gのメモリの上限を設定してコンテナを立ち上げる。
docker run --cpus 2 --memory 4g <イメージ> bash
コンテナの情報を表示する
コンテナのid、作られた時間、環境変数、割り当てられたCPU、メモリを確認することができます。そのコマンドは下記です。
docker inspect <コンテナID>
上記コマンドに| grep -i cpu
、| grep -i memory
をつなげて設定を確認してみてください。
今回は以上です。