Pa 3 docke 「コマンドによるイメージ取得とコンテナ稼働 コンテナ管理用サブコマンド ( 2 ) 3-07 ーコンテナ情報を表示・変更するサブコマンド ここでは、コンテナの情報を表示・変更するサブコマンドを紹介します。コンテナの一覧を表示する ps サブコマンド、コンテナ名を変更する「 ename サブコマンド、コンテナの通信ボート割り当て状況 を表示する po 「 t サブコマンド、コンテナの詳細情報を表示する inspect サブコマンド、コンテナのリ コンテナの情報を調べる ( ps サプコマンド ) ソース使用状況を表示する stats サブコマンドについて解説します。 コンテナの情報は、 ps サブコマンドを指定して docke 「コマンドを実行すると一覧表示 できます。 ps サブコマンドの基本的な書式は、次の通りです。 docker ps ーオプションノ ps サブコマンドの実行例を 3-7-1 に挙げました。 ps サブコマンドによるコンテナ情報の一覧表示の例 3-7-1 $ docl く e 「 ps I)ONTA INER I D D2e8a09f3045 3C492C3f2b6C 132 I MAGE ub 」 ntu httpd COMMAND "/bin/bash" "httpd-foreground" CREATED 4 minutes ago 31 minutes ago STATUS lJp 4 minutes 上 31 minutes PORTS NAbES hng ry-wescoff 0.0.0.0 : 32769- 〉 80 ハ cp d 「 eamy_hodgkin オプションを付けない状態では、 ( 一時停止状態のものを含めて ) 実行中のコンテナの情 報だけが表示されます。「 CONTAINER ID 」にはコンテナ旧、 FIMAGE 」にはイメージ 名、「 COMMAND 」にはコンテナ内で最初に実行されたコマンド、「 CREATED 」には作 成日時、「 STATUS 」には実行状態、「 PORTS 」にはボート転送の設定状況、「 NAMES 」 にはコンテナ名が表示されます。コンテナ ID は、 ] 2 バイト長の短いものが表示されます。 64 バイト長の完全なコンテナ旧を表示させるには、 -- no - t 「 unc オプションを指定します。 STATUS 項目に表示される実行状態は、実行中であれば「 Up 2 hou 「 s 」のような表示 になります。この例は、実行状態で 2 時間経過したことを示すものです。一時停止中のコ ンテナは「 CJp 2 hou 「 s (Paused) 」のように表示されます。一方、完全に停止状態にあ るコンテナは「 Exited (O) 6 hou 「 s ago 」のように表示されます。この例は、 6 時間前に コンテナが停止したことを示します。括弧内の数字は、コンテナで最初に稼働させたプロ セスがコンテナ停止時に終了した際のステータスコードです。一般的には、正常に終了し
イメージやコンテナの基本的な管理を体験する Chapter 3-02 >3-2-11 稼働したコンテナでコマンド操作が可能 ↓ docke 「代旧 -it し旧 tu : 14 . 04 /bin/bash Unable 士 0 find irnage ' ub し旧 tu : 14.04 ' locally 14.04 : Pulling from library/ubuntu こ 63fb41C2213 : Pull complete 99fcaefe76ef : Pull complete 5a4526e952f0 : PuII complete 1 73211C498 : Pull complete Digest : sha256 : d4b3 た 2fd31 b0693e9e446e56a175d142b098b5056be2083fb4afe5f97C7 新 e5 Status: Cbwnloaded 肥「 image fo 「山 un 士 u : 14 .04 「00t@932a1f8ed355 : / # uname -a Linux 932a1f8ed355 3.10.0-229.14.1. e 卩 . X86 ー 64 # 1 SIP Tue Sep 15 15 : 05 : 51 UTC 2015 X86-64 X86 ー 64 X86 ー 64 GW/Linux 「00t@932a1f8ed355 : / # /etc host . conf 旧 . so. conf e2 信 . conf profile 攣文紀 rs - d c ront ab host name 旧 .8. c “ . 6 賺 x い嫂 .6 prof ile.ci sysct 匚 conf adduse 「 . conf host s modul es pro 士 0C0 ls rsys ー og. conf sysctl-d ilternat ⅳ ( 当 Ⅱ baud i t . conf mtab debconf . conf 「 3 g 記 s t ー引 e. 引 i as 「に t 和 pyt トま 4 debian_ve 「 Si on ⅲは . d teminfo arnt) 「 . d sect 」 retty localt ⅱ肥 信 u は initramfs-tools net wo 「 ks security imezone deluse 「 . C師紆 ! 引 i Ⅳ、以 ucf . conf bash. bash rc i nput rc login. defs 一 cc*l 司 et i ( 記 mlogin se rv ー i nsse rv. conf logrotate. conf nssw i t ch. conf rc2-d shadow bindresvport . blacklist 、“ te ー mtd. 6 in.serv-cmf . d g 「 Ot 色 6 she Ⅱ s b Ⅲ i d. conf upstart-xsesions ー - release os- re ー ease ip 「 )lkid.iab envi 「 0 「訂旧 nt pam. conf subg i d f st ab : ヨ e ーれ ー SSue mag ー C subg i 十 fs 記 i ssue. 「旧 t mag ー C . rn 日「旧 passwd gai . conf ma Ⅱ cap subu i d : 「“し i し mailcap. orde 「 kerrel resol v. c 仟 subui d- g roup 旧 . so. cache : 「 ( れ n 最昂 y gshadow 「 0 c 計 ヨ - 旧 oe 「 S mime. types root@932a1 f8ed355 : Pa ュ 3 カスタマイズの一例として、インストール済みのソフトウェアバッケージを最新にする 改変を加えてみましよう。ソフトウェアパッケージを最新にするには、次のコマンドを実 行します。最初の apt-get コマンドでリボジトリ情報を更新し、次の apt-get コマンドで ソフトウェアバッケージを更新します。 # apt-get -y update # apt-get -y upgrade # exit Enter Enter Enter コマンド実行によって、例えば、 3-2-12 のように最新のパッケージがインストールされ るはずです。筆者が実施したタイミングでは、「 ntpdate 」というバッケージのバージョン 4.2.6. p5 がインストールされました。最後の exit コマンドの実行によって、 Bash が終了 し、それと同時にコンテナも停止します。 83
コンテナ管理用サブコマンド ( D - コンテナの作成や削除に関するサブコマンド ( hapte 「 3-06 指定できる値 オプション 短縮オプション コンテナに指定したメタデータをセットする。例 メタデータ 同 com.example.key= 値」 ファイルからメタデータを読み込んでコンテナにセ ファイル名 ットする コンテナ名または 指定したコンテナとリンクし、そのコンテナに接続 コンテナ ID 、もし するための情報を環境変数や / etc / hosts に設定す くはそれらと別名 る。別名指定は「コンテナ名 : 別名」のようにする の組み合わせ 実行ドライバがⅸ c の場合のみ有効。カスタム LXC オプションを指定するのに使う。例「—lxc- LXC オプション conf="lxc. cgroup. cpuset. CPUS=O, 1 " 」 コンテナのログドライバを指定する。既定値は Doc ke 「サーバーの一 g - d ⅱ ve 「フラグで指定されてい json-file 、 syslog 、 るもの。 docke 「 gs コマンドは、 json-file ドライ journald 、 none バだけで動作する ログドライバのオプションを指定 オプション コンテナに割り当てるメモリー上限値を指定する。 「 1 OOm 」や「 4g 」のように単位を示す文字を付加 メモリー上限値 して指定する。単位は「 b 、 k 、 m 、 g 」のいすれか の文字で指定する。 O を指定すると無制限 主メモリーとスワップを合計した量の上限値を指定 する。数値の指定方法は -- memo 「 y と同じ。 - 1 を指 メモリー上限値 定するとスワップが無効化される コンテナに割り当てるメモリー上限値 ( ソフトリミ ット ) を指定する。設定する数値は、 --memory で 指定する数値以下でなければならない。既定値は --memory と同じ値。「 1 OOm 」や「 4g 」のように 単位を示す文字を付加して指定する。単位は「 b 、 k 、 rn 、 g 」のいずれかの文字で指定する。 O を指定する と無制限 コンテナのスワップ傾向値を設定する。大きな数値 O ~ 1 OO までの を指定するとスワップが発生しやすくなる。既定値 整数 は 60 コンテナに割り当てる MAC アドレスを指定する MAC アドレス コンテナ名 コンテナ名を指定する コンテナのネットワークモードを指定する。既定値 は b 「 idgeo コンテナ用のネットワークスタックを 新規作成して Docke 「ブリッジに接続するのが「 b 「 i b 「 idge 、 host 、 dge 」、ホストのネットワークスタックをコンテナ containe 「 : コン でも使うのが「 host 」、他のコンテナのネットワー テナ名またはコン クスタックを使うのが「 containe 「 : コンテナ名」や テナ ID 、 host 「 containe 「 : コンテナ ID 」、ネットワークを無効化 するのが「 none 」 次ページへ続く --label —label-file --link 無し Pa ュ 3 --lxc-conf 無し --log-driver 無し --log-opt 無し --memo 「 y 無し --memory-swap メモリー上限値 --memory- 「 eservation し 無無無 —memory-swappness —mac-address —name 無し --net 1 1 9
Pa 3 docke 「コマンドによるイメージ取得とコンテナ稼働 Def e 「「 ed Del et ed Devi ce Count : 0 Lib 「 ary Version: 1 . 02.93 ー RHE ロ ( 2015 ー 01 ー 28 ) Execut ion D 「 iver: nat ⅳ e ー 0 . 2 Logging Driver: json-file Ke 「 n 引 Ve rs i on : 4 . 4 . 0 ー「 cl [ 〕 pe 「 a 士 i ng Syst em : Cent OS L i nux 7 ()o re) CPlJs : 2 ・ To 士 Memory: 7.669 GiB Name : loca lhost 」 oca ldoma i n ID: XT6V:0NHR:NGX4:GBCG:DXQU:SEZU:VIGY:QNPJ:PJF:LLEP:S640:JU6E 1 66 指定できるオプションはありません。 なお、 info サブコマンドには、コマンドの使用方法を表示する一 help オプション以外、 Registry: https://index.docker. io/vl/ I.Jse 「 name : sueyasu
Pa 4 Docke 「 f ⅱ e からのイメージ生成とプライベートレジストリの活用 設定ファイルの編集が終わったら、それをリポジトリ情報を格納するディレクトリ ( こ こでは /va 「 /lib/docke 「 - 「 egist 「 y を想定 ) にコピーしてから、プライベートレジストリを 以下の手順で起動します。 $ docker run -d -p 5000 : 5000 -v /var/lib/docker-registry: /var/lib/registry -restart=always registry : 2 /var/lib/registry/config. 1 Enter これで、プライベートレジストリを Docke 「 Hub のプロキシレジストリとして稼働で きました。 ー Docker サーバーの設定変更 稼働させたプロキシレジストリを Docke 「サーバーで利用するには、 Docke 「サーバー の起動時にト「 egist 「 y-mi 「「 o 「 =https://プロキシレジストリの IP アドレス : ポート番号」 というオプションを指定する必要があります。プロキシレジストリで TLS 通信を有効に していない場合は、起動オプションを「一「 egist 「 y - mi 「「 o 「 = http : 〃プロキシレジストリの 旧アドレス : ボート番号」に変更し、同時に -- insecu 「 e - 「 egist 「 y オプションも指定する必 要があります。 Docke 「サーバーの起動後、 Docke 「 Hub がイメージをダウンロードしてから、 curl コ マンドを使ってプロキシレジストリにそのイメージが登録されていることを確認してみて ください。登録されているようであれば、無事にキャッシュレジストリとして稼働してい ます。 1 98
Part4 Docke ⅱ e からのイメージ生成とプライベートレジストリの活用 可読性を考慮した記述にする 4-2-1 Docke 「 file の役割は、イメージを生成するための一時的な設定ファイルにはとどまり ません。イメージがどのように構成されているかを示すドキュメントとしての役割も担っ ています。そのため、できるだけ読みやすい記述にする工夫も必要です。 例えば、非常に長くなる命令行については、適当な箇所に「 \ 」を挿入して、記述を複数 行に分ける工夫が考えられます ( 4-2-1 ) 。また、引数を複数行に分けて記述する場合は、 読みやすさや作業ミスを防止するために、引数をアルファベット順に並べ替えて ( ソート して ) 記述するのが望ましいとされています。 長くなる命令行は「 \ 」を挿入して複数行に記述できる RUN apt-get update \ & & apt-get install -y --no-install-recomnends \ libaprl \ libaprutill \ libaprl-dev \ & & rm ーて /var/lib/apt/lists/* libssll . 0 . 0 \ libpcre 十十 0 \ libaprutill-dev \ この部分は 1 行 として扱われる 中間イメージの再利用に注意 bu ⅱ d サブコマンドによるイメージ生成の際、以前のイメージ生成作業と同一の処理を する箇所では、キャッシュ ( 一時保存 ) されている中間イメージが再利用されることがあ ります。中間イメージを再利用した場合、 bu ⅱ d サブコマンドは「 Using cache 」という 情報を表示します ( 4-2-2 ) 。 1 / 8
Pa 2 様々な環境への Docke 「のインストール ー Docker 専用 Linux ディストリビューション スを提供する場合は、こうした DOCke 「専用の Linux ディストリビューションの利用を検 4 ) や「 CentOS Atomic Host 」 ( 2-1 -5 ) などがあります。 Docke 「で本格的なサービ いた特徴を備えています。こうした Linux ディストリビューションには「 CO 「 eOS 」 ( 2-1 - みを提供するなど、クラウド環境でエンタープライズレベ丿レのサービスを提供するのに向 ます。また、分散システム ( クラスタ環境 ) への対応や、安全な OS アップデートの仕組 することを想定して作られており、システムを構成するソフトウェアを最小限に抑えてい の Linux ディストリビューションは、アプリケーションは基本的にすべて Docke 「で稼働 Docke 「の利用を前提に設計された Linux ディストリビューションもあります。これら >2-1-4 34 討してみると良いでしよう。 CoreOS (https://coreos.com/) 0 CoreOS Products ・ Usi ng CO OS す Documentation BIog Open Source P 「可 e ( fO 「 Linux Containers ventures ReleaseN0tes リ〆紕を Ph owphy 》 Try out CoreOS 600g に ventu 5 invests ⅲ CO OS ・ CoreOSannouncescommercia\ Kubernetes platform, Popularopen source projectsfordistributed apps: 0 C e05 OPEPATINGSYSTEM fleet Oetcd 〔 ONSE 、 SUS & 5C0 RY flannel 0 rkt CONTAiNERRUNTtME 90 十 more on
( hapte 「 4-03 Docke 「 f ⅱ e に記述できる命令 前者は ] つの VOLUME 命令で ] つのディレクトリしか指定できませんが、後者は複数 のディレクトリを指定できるという違いがあります。中間イメージの数を減らせるので、 複数のディレクトリを指定する場合には、できるだけ後者を使用する方が良いでしよう。 起動したコンテナにどのようなディレクトリが自動マウントされたかは、次のコマンド で調べられます。 $ docker inspect -f 日 { range $a awk '{print "host dir="$2 . Mounts} } { {println $a} } { {end} ドコンテナー cont dir="$3}' 年 Enter Pa ュ 4 イメージ作成時やコンテナ実行時のカレントディレクトリを指定 する命令 (WORKD 旧 ) イメージ作成時に使用する作業用コンテナや、生成したイメージから起動するコンテナ でコマンドを実行する際のカレントディレクトリを指定するのに使うのが、 WORKD 旧命 令です。 WO 日 KD 旧命令の書式は次の通りです。 W09 工 R ディレクリ ディレクトリは、絶対パス ( / を起点したバス。フルバス ) か相対パス ( 現在位置を起 点にしたバス ) で指定します。相対パスを指定した場合は、その時点で設定されているカ レントディレクトリを起点に解釈されます。 WO 日 KD 旧命令を複数記述した場合、作業用コンテナには直前の設定が反映されます。 生成したイメージから起動するコンテナには、 Docke 「 f ⅱ e で最後に指定したカレントディ レクトリ設定が反映されます。
Pa 4 Docke ⅱ e からのイメージ生成とプライベートレジストリの活用 $ man 7 signal Enter 特定ディレクトリにマウントして使用するように指定するのに使うのが、 VOLUME 命令 Docke 「サーバーが稼働するホストに一時ディレクトリを作成し、それをコンテナ内の 命令 (VOLUME) ホストの一時ディレクトリを割り当てるディレクトリを指定する コマンドや、「 un サブコマンドで指定したコマンドを実行する際に使用されます。 生成したイメージから起動したコンテナで、 CMD 命令や ENT 日 YPOINT 命令で指定した ここで指定したユーザー権限は、以降の日 IJN 命令で指定したコマンドを実行する際や、 USER ユーグ名またなユーグ 使用するのが、 USE 日命令です。 USE 日命令の書式は次の通りです。 イメージ作成作業やコンテナでプロセスを稼働させる際のユーザー権限を指定するのに (USER) イメージ作成時やコンテナ実行時のユーザーを指定する命令 $ docker kill -s SIGUSRI コンテ . ナ = かどうかは、 ki Ⅱサブコマンドを次のように実行することで確かめられます。 生成したイメージから起動したコンテナを、ここで指定したシグナルで終了させられる STOPSIGNAL SIGUSRI 省略できないので注意が必要です。 Docke 「 file に記述します。シグナル名の先頭にある「 SIG 」は k Ⅲサブコマンドと違って 例えば、ユーサー定義シグナル「 SIGUSR ] 」を指定する場合は、次のように 1 90 VO [ " コンテナ内のディレクリ " ん " コンテナ内のディレクリ″ VO 石コンテナ内のディレクリ です。 VOLUME 命令の書式は、次の 2 種類があります。
( hapte 「 4-03 Docke 「 f ⅱ e に記述できる命令 EXPOSE 53 53/udp 80 イメージに付加する管理情報 ( メタデータ ) を指定する命令 (LABEL) 生成するイメージに、キーと値の組み合わせによる任意の管理情報を付加するのに使う のが、 LABEL 命令です。 LABEL 命令の書式は次の通りです。 例えば、「 ve 「 sion 」というキーと「ⅵ . O 」という値の組み合わせからなる管理情報を付 加する場合は、次のように LABEL 命令を記述します。 Pa ュ 4 LABE version=vl . 0 書式で分かる通り、イメージには任意の個数の管理情報を付加できます。 F 日 OM 命令で 指定したべースイメージに同じキーの管理情報が存在した場合には、 LABEL 命令で指定 した値が上書きされます。 LABEL 命令で設定した管理情報は、生成したイメージに対して inspect サブコマンド を次のように実行することで調べられます。 . Config .Labe1s} } { {println $a $ docker inspect -f 日 { range $a,$b {{end}}' イメージ E nte r イメージ作成者の名前を指定する命令 (MAINTAINER) イメージ作成者の名前を指定するのに使う命令が、 MAINTAINER 命令です。 MAINTA E 日命令の書式は次の通りです。 題工 NTA 工 NER ・名・ 名前には空白などが含まれていても構いません。改行までの文字列が、イメージの Autho 「設定項目にセットされます。 1 8 /