Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Docker】Docker run時の基本的なオプション(共有、ユーザ、ポート、CPU/メモリ)の紹介

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をつなげて設定を確認してみてください。

今回は以上です。

idek
dialog-inc
『物流業界をテクノロジーの力でHAPPYに』株式会社ダイアログは、WMS(在庫管理システム)を切り口に、物流業界にテクノロジーの光を当て、物流業界に携わるすべての人がよりHAPPYとなる社会を作っていきます。
https://www.dialog-inc.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away