自分のパソコンでは動かない
友だちが作ったゲームを、あなたのパソコンで動かそうとしました。ところがエラーが出て、始まりません。友だちのパソコンでは動くのに、です。
原因は、入っているソフトの版が少しずつ違うことでした。この「うちでは動くのに」を無くす道具が、コンテナーです。
このレッスンのゴール
メモ
コンテナーの一覧を読んで、動いているものと止まったものを見分けられる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| コンテナー | アプリと必要なものを一つの箱に入れて、他と分けて動かす仕組み | |
| イメージ | コンテナーを作るための、変えられない設計図 | |
| ログ | アプリが自分の様子を書き残した記録 | |
| ボリューム | コンテナーが止まっても残る、保存用の場所 | |
| ヘルスチェック | アプリが元気かを、決まった間隔で調べること | healthy |
学生が入力するセルは、このプレビューでは空白です。
コンテナーは軽い箱
コンテナーの中には、アプリと、そのアプリに必要なものだけが入っています。外のパソコンの設定が違っても、箱の中は同じです。
仮想マシンと違って、OSまるごとは入れません。だから起動が数秒で終わり、一台のパソコンに何個も置けます。
例:イメージとコンテナー
| 言葉 | たとえ | 変えられるか |
|---|---|---|
| イメージ | ケーキのレシピ | 変えられない |
| コンテナー | レシピから焼いたケーキ | 中身は変わる |
| ボリューム | 冷蔵庫に入れた作り置き | 焼き直しても残る |
学生が入力するセルは、このプレビューでは空白です。
動いているものを見る
docker ps --format "{{.Names}} {{.Status}}"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
状態の言葉を読む
一覧の「状態」の欄には、短い言葉が出ます。Up は動いている、Exited は止まった、という意味です。
(healthy) が付いていれば、ヘルスチェックに通っています。Exited (1) のかっこの数は、止まったときの終わり方で、0以外は失敗です。
例:状態の欄
| 状態の欄 | 意味 | 次にすること |
|---|---|---|
| Up 5 minutes (healthy) | 5分前から元気に動いている | 何もしない |
| Up 1 minute (unhealthy) | 動いているが、調べると返事がない | ログを見る |
| Exited (1) 2 minutes ago | 失敗して止まった | ログを見る |
| Exited (0) 1 hour ago | 仕事を終えて止まった | 普通は何もしない |
学生が入力するセルは、このプレビューでは空白です。
止まったものも見る
docker ps -a --format "{{.Names}} {{.Status}}"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
止まった理由はログに書いてある
アプリは、困ったことを文章にして書き残します。それがログで、コンテナーのログは docker logs 名前 で読めます。
直す前に、まずログの最後の数行を読みます。たいていは、足りないものや間違った設定が、そのまま文章で書いてあります。
例:ログの読み方
| ログの行(例) | 読み取れること |
|---|---|
| shop: started on port 8080 | 起動して、8080番の入口で待った |
| shop: reading prices from /data/prices.txt | 価格のファイルを読もうとした |
| shop: cannot start, /data/prices.txt not found. | 読めず、そのファイルが無いと言っている |
| shop: put the file in /data, then restart me. | 直し方も書いてある |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
止まったら、とにかく再起動すればよいと思いがちです。原因が残っていれば、また同じ所で止まります。先にログを読み、原因を直してから再起動します。
ボリュームだけが残る
コンテナーの中に書いたファイルは、ラボを止めると消えます。残したいデータは、ボリュームに書きます。
ボリュームは、コンテナーの外にある保存場所です。コンテナーを作り直しても、同じボリュームをつなげば、データはそのまま使えます。
共有の場所をのぞく
docker exec web ls /settingsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
さらに挑戦:メモリーの上限
コンテナーには、使えるメモリーの上限を決められます。上限を超えると、そのコンテナーだけが止められ、他のコンテナーは守られます。
なぜ「箱ごとに上限」を決めるのが、一台のサーバーで多くのアプリを動かすときに大事なのか、自分の言葉で書きましょう。