9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Dockerはわかるけど…」から卒業!AWSでコンテナを動かすための30日集中講座 - Day 7: 第1週のまとめとスキルチェックテスト

Posted at

Day 7: 第1週のまとめとスキルチェックテスト 📝

皆さん、こんにちは!30日集中講座、Day 7へようこそ。

あっという間に1週間が経ちました。この7日間で、皆さんはコンテナとDockerの基礎を学び、ローカル環境でマルチコンテナアプリケーションを構築するスキルを身につけました。これは、これからのクラウドネイティブ開発において非常に重要な第一歩です。

今日は、これまでの学びを振り返るための「スキルチェックテスト」に挑戦しましょう。


1. スキルチェックテスト

これから、4つの実践的な課題を出題します。テキストエディタとターミナルを開き、ぜひ挑戦してみてください。

課題1: コンテナとイメージの基本操作

  1. alpine:latest イメージをDocker Hubから取得してください。
  2. 取得したイメージから、ls -l / コマンドを実行するコンテナを起動してください。
  3. 起動したコンテナのIDを確認し、停止後、削除してください。

課題2: Dockerfile の作成

以下の要件を満たすDockerfileを、nginx-custom/ ディレクトリ内に作成してください。

  • ベースイメージは nginx:1.21-alpine を使用する。
  • コンテナ内の /usr/share/nginx/html に、"Hello Docker!" と書かれた index.html ファイルを配置する。
  • ブラウザで正しく表示されるよう、HTMLの構造を含めること。
  • .dockerignoreファイルを作成し、不要なファイルをビルドコンテキストから除外すること。

課題3: Docker Compose でのマルチコンテナ構築

以下の要件を満たすdocker-compose.ymlを作成し、起動してください。

  • webdb の2つのサービスを定義する。
  • web サービスは、./nginx-custom ディレクトリの Dockerfile を使ってイメージをビルドする。
  • web サービスは、ホストの 8080 ポートをコンテナの 80 ポートにマッピングする。
  • db サービスは、公式の postgres:13 イメージを使用し、パスワードをDocker Secretsで安全に管理する。
  • db サービスのデータを永続化するため、名前付きボリュームを定義してマウントする。

課題4: トラブルシューティング

以下のdocker-compose.ymlファイルを起動しようとしたところ、エラーが発生しました。エラーの原因を特定し、解決してください。

services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres:13

2. 解答と解説

課題1: 解答

  1. docker pull alpine:latest
  2. docker run alpine:latest ls -l /
  3. docker ps -a でコンテナIDを確認し、docker rm <CONTAINER_ID> -f で強制削除する。

課題2: 解答

nginx-custom/Dockerfile

FROM nginx:1.21-alpine
COPY index.html /usr/share/nginx/html

nginx-custom/index.html

<!DOCTYPE html>
<html>
<head>
    <title>Hello Docker</title>
</head>
<body>
    <h1>Hello Docker!</h1>
</body>
</html>

.dockerignore

.git/
node_modules/
*.log
.env

.dockerignoreファイルは、イメージをビルドする際にコンテナにコピーされないよう、不要なファイルを指定します。

課題3: 解答

docker-compose.yml

services:
  web:
    build: ./nginx-custom
    ports:
      - "8080:80"
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3
  
  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db_password
      - POSTGRES_DB=myappdb
    secrets:
      - db_password
    deploy:
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 256M

secrets:
  db_password:
    file: ./secrets/db_password.txt

volumes:
  postgres_data:

解説: deployセクションでメモリ制限を設定することで、コンテナがホストのリソースを過剰に消費するのを防ぎます。

課題4: 解答

エラーの原因は主に2つ考えられます。

  1. ポート競合: portsに指定されたホスト側のポートが既に別のプロセスによって使用されているため、コンテナを起動できません。
    • 実際のエラーメッセージ例: Error: failed to start container: port is already allocated
  2. 必須環境変数の不足: PostgreSQLの公式イメージは、パスワードが設定されていないと起動しません。
    • 実際のエラーメッセージ例: database is uninitialized and superuser password is not specified

解決策は以下の通りです。

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres:13
    ports:
      - "5433:5432"
    environment:
      - POSTGRES_PASSWORD=mysecretpassword
      - POSTGRES_DB=myappdb

ヒント: 既存のコンテナがポートを占有している場合、docker compose downで停止してから再起動するだけで解決することがほとんどです。


3. 実践的なデバッグスキルとセキュリティ

コンテナが動かない時に役立つコマンドと、より安全な環境変数の管理方法を覚えておきましょう。

  • コンテナ内へのアクセス: コンテナの内部を直接調査したい場合に便利です。
    docker exec -it <container_name> /bin/sh
    
  • コンテナの詳細情報確認: 実行中のコンテナの設定(マウントされたボリューム、ポート設定、環境変数など)を詳細に確認できます。
    docker inspect <container_name>
    
  • バージョン指定: docker-compose.ymlファイルのversion指定は現在非推奨です。Docker Compose V2では自動で適切なバージョンが適用されます。

4. まとめ:第1週の振り返り

この1週間、Dockerの旅お疲れ様でした!これらの課題をスムーズに解けたなら、皆さんはDockerの基本的な操作を完全にマスターしたと言えるでしょう。

Dockerは、環境構築の課題を解決し、開発の生産性を飛躍的に向上させる強力なツールです。このスキルは、今後のキャリアを築く上で大きな武器になります。

明日からは、いよいよ第2週に突入し、これまで学んだDockerの知識を活かして、AWS上でのコンテナ運用に挑戦します。


次回の予告
Day 8: いざ、AWSへ!コンテナ開発のクラウド化

それでは、また明日お会いしましょう!

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?