LinuCレベル2 201試験の例題と解説
主題2.06コンテナ
2.06.2Dockerコンテナとコンテナイメージの管理
LinuCレベル2 201試験の出題範囲から「2.06.2 Dockerコンテナとコンテナイメージの管理」についての例題を解いてみます。
例題
あるサーバにインストールされているコンテナの中に「linuc.txt」というファイルが存在するかどうかを確認したい。以下のコマンドを並び替えた時、確認の順序として適切なものはどれか。1-5の選択肢の中から1つ選べ。また、[コンテナID]は事前に把握できていないものとする。
a. docker exec -it [コンテナID] /bin/bash
b. exit
c. find / -name linuc.txt
d. docker ps
e. docker images
- a→e→c→b
- d→a→c→b
- a→b→d→c
- c→d→a→b
- e→a→c→b
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「2. d→a→c→b」です。
Dockerは、Docker Hubなどのコンテナレポジトリからコンテナイメージを取得し、それをベースにコンテナを作成します。
a,d,eのdocker関連のコマンドは、それぞれ以下の意味を持ちます。
- docker exec : 既に実行中のDockerコンテナ内で新たなコマンドを実行する
- docker ps : 起動中のコンテナの一覧を表示する
- docker images : ローカルに存在するDockerイメージの一覧を表示する
以下、コマンドの操作例です。
・docker exec
root@linuc:~# docker exec -it b875a5fce2c8 /bin/bash
root@b875a5fce2c8:/#
上記のように-itオプションを使用することで、対話式のbashシェルを開始することが可能となり、インタラクティブなシェルセッションを実現できます。
・docker ps
root@linuc:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b875a5fce2c8 jitsi/web:stable-10431 "/init" 5 hours ago Up 5 hours 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp jitsi-docker-jitsi-meet-2b459c5-web-1
fae30d17bcc9 jitsi/jicofo:stable-10431 "/init" 26 hours ago Up 24 hours 127.0.0.1:8888->8888/tcp jitsi-docker-jitsi-meet-2b459c5-jicofo-1
083ead546356 jitsi/jvb:stable-10431 "/init" 26 hours ago Up 24 hours 127.0.0.1:8080->8080/tcp, 0.0.0.0:10000->10000/udp, [::]:10000->10000/udp jitsi-docker-jitsi-meet-2b459c5-jvb-1
b72043017afc jitsi/prosody:stable-10431 "/init" 26 hours ago Up 24 hours 5222/tcp, 5269/tcp, 5280/tcp, 5347/tcp
コンテナID,イメージ名,コンテナ内で実装されているコマンド,コンテナ作成日時,ステータス,公開ポート,コンテナ名を取得できます。
・docker images
root@linuc:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jitsi/jvb stable-10431 9c353f0e990b 5 weeks ago 801MB
jitsi/jicofo stable-10431 d515d975b36a 5 weeks ago 662MB
jitsi/prosody stable-10431 3e2b14329092 5 weeks ago 209MB
jitsi/web stable-10431 76252f80a114 5 weeks ago 327MB
レポジトリ,タグ,イメージID,イメージ作成日時,サイズを取得できます。
各選択肢の解説は次の通りです。
1. a→e→c→b
誤りです。
本選択肢ではdocker psではなくdocker imagesでコンテナIDを取得しようとしています。imagesはコンテナイメージの情報を取得するコマンドであり、実行中のコンテナそのものの情報を取得するコマンドではありません。そのためdocker imagesを使用してもコンテナIDは取得できないという点で、本選択肢は誤りとなります。
2. d→a→c→b
正解の選択肢となります。
docker psでコンテナIDを取得したうえでdocker execを実行しており、b875a5fce2c8というコンテナ内でfindコマンドを使用することで、linuc.textファイルが存在するかどうか確認を行っています。また、確認後の後処理としてexitコマンドでコンテナ外に移動しています。
3. a→b→d→c
誤りです。
d→aの順番となっていません。また、3の順番でコマンドを実行すると、cのコマンドをコンテナ外で実行することとなり、コンテナ内にファイルが存在するかどうかの確認を行うことができません。
4. c→d→a→b
誤りです。
cのコマンドをコンテナ外で実行してしまっています。コンテナ内にlinuc.textが存在するかを確認したいため、cのコマンドはコンテナ内で実行する必要があります。
5. e→a→c→b
誤りです。
本選択肢においても、1と同様docker psではなくdocker imagesでコンテナIDを取得しようとしています。1と同様docker imagesを使用してもコンテナIDは取得できないという点で、本選択肢は誤りとなります。
dockerコンテナを管理するためのコマンドを覚え、コンテナを適切に利用できるようにしておきましょう。
例題作成者
株式会社デージーネット 経営企画室 大河内 龍馬