Docker

Docker練習問題

答えを見る前にコマンドを実行し、状態・ログ・データの違いを説明してみましょう。

Docker入門の講座一覧

01

基本操作の問題

問題1:状態を確認する

Nginxをpractice-webという名前で起動し、ホストの8082番からアクセスできるようにしてください。起動後、実行中の一覧とログを確認します。

確認したいこと

-d、--name、-pの役割を説明できるか、docker psとdocker logsを使えるか確認します。

解答例
ターミナルCOMMAND
docker run -d --name practice-web -p 8082:80 nginx:alpine
docker ps
docker logs --tail 10 practice-web

問題2:停止と再開

問題1のコンテナを停止し、一覧で停止状態を確認したあと、再開してブラウザで表示を確認してください。

解答例
ターミナルCOMMAND
docker stop practice-web
docker ps -a
docker start practice-web
curl http://localhost:8082
02

Dockerfileの問題

index.htmlに自分の名前または好きな言葉を表示するNginxイメージを作り、practice-page:1.0というタグで起動してください。

ヒント

DockerfileはFROM nginx:alpineから始め、HTMLをCOPYします。ビルドコンテキストを示す最後の.を忘れないようにします。

解答例
ターミナルCOMMAND
docker build -t practice-page:1.0 .
docker run -d --name practice-page -p 8083:80 practice-page:1.0
curl http://localhost:8083
確認する結果OUTPUT
<h1>自分で作ったページ</h1>

HTMLを変更したのに表示が変わらない場合は、イメージを再ビルドしたか、古いコンテナを使っていないかを確認します。

03

データと通信の問題

問題3:ボリュームでファイルを残す

名前付きボリュームpractice-dataへメッセージを書き込み、別の一時コンテナから読み出してください。

解答例
ターミナルCOMMAND
docker volume create practice-data
docker run --rm --mount source=practice-data,destination=/data alpine sh -c 'echo Docker > /data/message.txt'
docker run --rm --mount source=practice-data,destination=/data alpine cat /data/message.txt
実行結果OUTPUT
practice-data
Docker

問題4:名前で接続する

ネットワークpractice-netとNginxコンテナpractice-siteを作り、同じネットワークのBusyBoxから名前解決を確認してください。

解答例
ターミナルCOMMAND
docker network create practice-net
docker run -d --name practice-site --network practice-net nginx:alpine
docker run --rm --network practice-net busybox nslookup practice-site
04

Composeの問題

次のComposeファイルを使い、Webサービスを8084番で起動してください。起動後、docker compose ps、docker compose logs、docker compose configを実行し、役割を説明します。

compose.yamlYAML
services:
  web:
    image: nginx:alpine
    ports:
      - "8084:80"
解答例
ターミナルCOMMAND
docker compose up -d
docker compose ps
docker compose logs --tail 10 web
docker compose config
docker compose down
発展問題

Webサービスへバインドマウントを追加し、ホストのHTMLを編集したらブラウザの表示が変わる構成を作ってみましょう。さらにRedisサービスを追加し、Webからはredisというサービス名で接続する理由を説明してください。