Docker コンテナの実行

DockerBeginner
オンラインで実践に進む

はじめに

この実験では、ヴィクトリア朝時代を舞台にしたシナリオの中で、骨董品商としての役割を担います。あなたの目標は、最新技術である「Docker コンテナ」を活用して、歴史的な遺物を効率的に輸送・展示することです。

あなたは 1880 年代のロンドンで尊敬を集める骨董品商であり、世界中から集めた素晴らしいコレクションで知られています。しかし、従来の木箱や陳列ケースの代わりに、あなたは「Docker コンテナ」という革命的な技術を発見しました。これにより、貴重な品々をかつてない効率と安全性で梱包、輸送、展示できるようになりました。

この実験を終える頃には、Docker コンテナの基本を理解し、それを使ってアプリケーションを実行する方法を習得しているはずです。ヴィクトリア朝のシナリオにおいては、これがあなたの貴重な骨董品コレクションを管理・展示する能力を象徴しています。

Docker 環境のセットアップ

このステップでは、コンテナを実行するために Docker 環境が正しく設定されていることを確認します。これは、骨董品の作業場に必要な道具や設備を準備するようなものだと考えてください。

  1. ターミナルで以下のコマンドを実行し、Docker をインストールします。

    sudo apt update
    sudo apt install docker.io
    

    最初のコマンドはパッケージリストを更新して最新の Docker を取得できるようにし、2 番目のコマンドで Docker 本体をインストールします。sudo プレフィックスは、インストールに必要な管理者権限を付与します。

  2. Docker がインストールされたら、Docker サービスを再起動して、実行中のデーモンがインストールしたバージョンと一致するようにします。

    sudo systemctl restart docker
    

    このコマンドは、新しくインストールされたパッケージバージョンで Docker デーモンを再読み込みします。Docker がまだ起動していない場合は、restart によってサービスが開始されます。これにより、最初のコンテナを実行する際にクライアントとデーモンの API バージョン不一致を防ぐことができます。

  3. Docker が正常に動作しているか確認します。

    sudo systemctl status docker
    

    このコマンドは、Docker がアクティブで正常に動作しているかを確認します。active (running) と表示されれば、Docker 環境の準備は完了です。もし inactive やエラーメッセージが表示された場合は、再度 sudo systemctl restart docker を実行してから続けてください。

  4. 毎回 sudo を使わずに Docker コマンドを実行できるように、ユーザーを Docker グループに追加します。

    sudo usermod -aG docker $USER
    

    注意:このコマンドを実行した後、変更を反映させるために一度ログアウトして再ログインする必要がある場合があります。この実験では、互換性を確保するため、引き続き Docker コマンドに sudo を付けて実行します。

Hello-World コンテナの実行

環境が整いましたので、最初の Docker コンテナであるシンプルな「hello-world」を実行します。これは、新しいコンテナ技術が期待通りに機能することを確認するために、最初の骨董品を展示するようなものです。

  1. Docker Hub から「hello-world」イメージをプル(ダウンロード)します。

    sudo docker pull hello-world
    

    このコマンドは、Docker Hub(Docker イメージの公開リポジトリ)から hello-world イメージをダウンロードします。これは、遠い国から最初の骨董品を入手するようなものです。Docker Hub は、さまざまな目的のためのパッケージ化されたコンテナを見つけることができる市場のような場所です。

  2. 「hello-world」コンテナを実行します。

    sudo docker run hello-world
    

    このコマンドは、hello-world イメージからコンテナを作成し、起動します。コンテナはメッセージを出力するだけの単純なプログラムを実行し、その後終了します。ヴィクトリア朝のシナリオでは、これは新しいコンテナシステムが正しく機能することを確認するために、最初の骨董品を短時間展示することに相当します。ここでクライアントとデーモンの API バージョン不一致が報告された場合は、sudo systemctl restart docker でサービスを再起動してからコマンドを再実行してください。

  3. 出力を確認して、コンテナが正常に実行されたことを確認します。「Hello from Docker!」で始まるメッセージと、それに続く説明文が表示されるはずです。これにより、以下が確認できます。

    • Docker が正しくインストールされていること
    • システムがコンテナを正常に作成できること
    • Docker Hub からイメージをダウンロードできること
  4. すべてのコンテナ(終了したものを含む)のリストを表示するには、以下のコマンドを使用します。

    sudo docker ps -a
    

    このコマンドは、終了した hello-world コンテナを含むすべてのコンテナを表示します。コンテナ ID、作成元のイメージ、作成日時、現在のステータスなどの詳細を確認できます。

Nginx Web サーバーのデプロイ

このステップでは、Docker コンテナを使用して Nginx Web サーバーをデプロイします。ヴィクトリア朝のシナリオでは、これは最も貴重な骨董品(Web コンテンツ)を訪問者に披露するためのエレガントな陳列棚(Nginx)を設置することに相当します。

  1. Docker Hub から Nginx イメージをプルします。

    sudo docker pull nginx
    

    このコマンドは、Docker Hub から公式の Nginx イメージをダウンロードします。Nginx は HTML コンテンツを提供できる人気の Web サーバーです。これは、骨董品コレクションのための立派な陳列棚を入手することに相当します。

  2. デタッチモードで Nginx コンテナを実行し、ホストのポート 80 をコンテナのポート 80 にマッピングします。

    sudo docker run -d -p 80:80 nginx
    

    コマンドの詳細は以下の通りです。

    • run: 新しいコンテナを作成して起動する
    • -d: デタッチモード(バックグラウンド)でコンテナを実行する
    • -p 80:80: ホストマシンのポート 80 をコンテナ内のポート 80 にマッピングし、Web トラフィックが Nginx サーバーに到達できるようにする
    • nginx: 使用するイメージを指定する

    これは、ショールームに陳列棚を設置し、訪問者が骨董品を見られるようにするようなものです。

  3. Nginx コンテナが実行されていることを確認します。

    sudo docker ps
    

    このコマンドは、実行中のすべてのコンテナを表示します。リストの中に Nginx コンテナが表示され、アクティブに動作していることが確認できるはずです。

  4. 上部メニューの実験ツールから Web サービスマッピングを追加し、ポートマッピングを 80 に設定します。Nginx Web サーバーが正常に動作していれば、実験環境が自動的にサーバー内のランダムな URL へ移動し、Nginx のデフォルトのウェルカムページが表示されるはずです。

  5. オプション:ブラウザから手動で Nginx サーバーにアクセスしたい場合は、http://localhost またはマシンの IP アドレスにアクセスしてください。

  6. 何らかの問題が発生した場合は、コンテナのログを確認できます。

    sudo docker logs <container_id>
    

    <container_id> は、docker ps コマンドの出力から確認できる Nginx コンテナの ID に置き換えてください。

まとめ

この実験では、Docker コンテナを実行するための基本的な概念を紹介しました。歴史的な文脈をシミュレートし、ヴィクトリア朝時代の骨董品商として振る舞うことで、Docker の実行機能を活用する実践的な経験を積むことができました。

以下の内容を学びました。

  • Docker 環境のセットアップ
  • Docker Hub からのイメージのプル
  • フォアグラウンドおよびデタッチモードでのコンテナ実行
  • コンテナポートのホストマシンへの公開
  • コンテナステータスの確認

これらのスキルはコンテナ技術の基礎であり、骨董品商のシナリオを超えて幅広いアプリケーションに応用できます。現代の環境では、これらの手法はシンプルな Web サーバーから複雑なマイクロサービスアーキテクチャまで、あらゆるアプリケーションのデプロイに使用されています。

アプリケーションを依存関係とともにポータブルなコンテナにパッケージ化する能力は、標準化された輸送用コンテナが世界貿易を変革したように、ソフトウェアのデプロイと管理の方法を根本から変えました。ヴィクトリア朝の骨董品商ならこう言うでしょう。「この素晴らしい Docker コンテナは、我々が世界に宝物を披露する方法を革命的に変えるだろう!」