type
status
date
slug
summary
tags
category
icon
password

ソリューション

ソフトウェアアプリケーションのコンテナ化とデプロイ
この総合演習では、Nexus サーバーをコンテナ化し、Docker を使用してビルドおよびテストを行い、その後 OpenShift クラスターにデプロイします。

達成目標

以下のスキルを習得します:
  • Nexus サーバーを適切にコンテナ化する Dockerfile を作成できる。
  • Docker を使用して Nexus サーバーのコンテナイメージをビルドし、デプロイできる。
  • Nexus サーバーのコンテナイメージを OpenShift クラスターにデプロイできる。

事前準備

総合演習用のセットアップスクリプトを実行してください。
ラボ用のファイルは /home/student/DO285/labs/review に配置されています。
ソリューションファイルは /home/student/DO285/solutions/review にあります。

手順

1. Nexus サーバーをコンテナ化する Docker イメージの作成

  • サーバーは nexus ユーザーおよびグループ(UID: 1001, GID: 1001) として動作する必要があります。
  • java-1.8.0-openjdk-devel パッケージ をインストールする必要があります。このパッケージをインストールするための RPM リポジトリは、提供されている training.repo ファイルに設定されています。このファイルをコンテナの /etc/yum.repos.d ディレクトリに追加してください。
  • Nexus サーバーは nexus-2.14.3-02-bundle.tar.gz という圧縮ファイルで提供されます。このファイルは以下の URL から取得できます: ※ get-nexus-bundle.sh スクリプトを使用して、イメージのビルド前にこのアーカイブを取得できます。
    • nexus-start.sh スクリプトを実行して Nexus サーバーを起動してください。
    • 作業ディレクトリおよび Nexus のホームディレクトリは /opt/nexus にすること。バージョン固有の Nexus ディレクトリを nexus2 という名前でシンボリックリンクとして設定してください。
    • 永続データは /opt/nexus/sonatype-work に保存されるため、永続ボリュームとしてマウントできるようにすること。
      • まず、永続ボリュームなしでコンテナをビルド・テストし、その後永続ボリュームを追加する方法で作業を進めるのがおすすめです。
    • nexus アカウント作成用のスニペットJava のインストール用スニペットimage lab ディレクトリにあります。Dockerfile 作成時に活用してください。

    2. Docker を使用してコンテナをビルド・テスト

    • 作成した Docker イメージを、ボリュームマウントなし/ありの両方でテストしてください。
    • /home/student/DO285/labs/deploy/dockerボリュームマウント付きでコンテナを実行するためのシェルスクリプト があります。
    • 実行中のコンテナの IP アドレスを確認し、curl コマンドやコンテナのログを使って Nexus サーバーが正常に動作しているかを検証してください。

    3. Nexus サーバーのコンテナイメージを OpenShift クラスターにデプロイ

    • コンテナイメージを classroom のプライベートレジストリ (registry.lab.example.com) にプッシュすること。
    • /home/student/DO285/labs/review/deploy/openshift に、デプロイを支援する以下のファイルやスクリプトがあります。
      • create-pv.sh(Nexus の永続データ用の Kubernetes 永続ボリュームを作成)
      • delete-pv.sh(永続ボリュームの削除)
      • resources/pv.yaml(永続ボリュームの定義)
      • resources/nexus-template.json(Nexus サーバーのデプロイ用 OpenShift テンプレート)
    • /home/student/DO285/solutions/review には、デプロイ/アンデプロイの参考になるスクリプトが用意されています。
    • イメージのタグは nexus:latest にすること(OpenShift テンプレートがこの名前を前提としている)。
    • OpenShift のプロジェクト名は review に設定すること。
    • プロジェクト作成後、setpolicy.sh を実行して適切な権限を設定してください。
    • 永続ボリュームを作成後に Nexus のデプロイを実施すること。
    • Nexus サーバーのサービスを デフォルトのルート名で公開し、ブラウザでアクセスできるようにする。

    4. 動作確認と評価

    • 採点スクリプトを実行し、作業の評価を行う。

    5. クリーンアップ

    • OpenShift で作成したプロジェクトを削除し、ローカルの Docker イメージを削除してください。

    この手順に従って Nexus サーバーをコンテナ化し、Docker でテストした後、OpenShift にデプロイして動作を確認してください。

    Let’s go!

    1. Nexusサーバをコンテナ化するためのDockerfileを作成する
      1. /home/student/DO285/labs/review/imageディレクトリに移動し、Dockerfileを作成してください。
        1.1 ベースイメージを指定する
        1.2 任意の名前とメールアドレスをメンテイナーとして設定する
        1.3 NEXUS_VERSIONとNEXUS_HOMEの環境変数を設定する
        1.4 training.repoを/etc/yum.repos.dディレクトリに追加し、Javaパッケージをyumコマンドでインストールする
        1.5 サーバのホームディレクトリとサービスアカウント/グループを作成する
        1.6 NexusサーバソフトウェアをNEXUS_HOMEにインストールし、起動スクリプトを追加する
        1.7 コンテナをnexusユーザーとして実行し、作業ディレクトリを/opt/nexusに設定する
        1.8 Nexusサーバの永続データを保存するためのボリュームマウントポイントを定義する
        1.9 Nexusサーバのシェルスクリプトを実行する
        完成したDockerfileは次のようになります:
    1. get-nexus-bundle.shスクリプトを使ってNexusサーバのファイルをイメージディレクトリに取得する
      1. 取得後、nexusというタグでコンテナイメージをビルドします:
    1. 提供されたrun-persistent.shシェルスクリプトを使って、Dockerでイメージをテストする
      1. /home/student/DO285/labs/review/deploy/dockerディレクトリに移動し、コンテナ名をdocker psコマンドで確認した名前に置き換えます:
        説明:
      2. cd /home/student/DO285/labs/review/deploy/docker
          • dockerディレクトリに移動します。
      3. ./run-persistent.sh
          • run-persistent.shスクリプトを実行します。このスクリプトは、Dockerコンテナをバックグラウンドで起動し、必要なディレクトリを設定します。
          • 出力:コンテナID(例:80970007036bbb313d8eeb7621fada0ed3f0b4115529dc50da4dccef0da34533)が表示されます。
      4. docker ps
          • 現在実行中のDockerコンテナの一覧を表示します。
          • 出力:コンテナが正常に起動したことを確認できます。
            • コンテナID:80970007036b
            • イメージ:nexus
            • コマンド:sh nexus-start.sh
            • ステータス:Up 4 seconds(起動してから4秒)
            • 名前:quizzical_fermat
      5. docker logs -f quizzical_fermat
          • quizzical_fermatという名前のコンテナのログを表示し、リアルタイムで更新を追跡します。
          • 出力:Nexusが正常に起動している様子がログに表示されます。
            • NexusのWebサーバーがポート8081で起動し、Jettyサーバーが開始されていることが確認できます。
      6. docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' quizzical_fermat
          • 実行中のコンテナ(quizzical_fermat)のIPアドレスを取得します。
          • 出力:コンテナのIPアドレスは172.17.0.2です。
      7. curl -v 172.17.0.2:8081/nexus/
          • コンテナ内で実行中のNexusサーバーにHTTPリクエストを送信し、応答を確認します。
          • 出力:
            • HTTPレスポンスコード302 Foundが返され、ブラウザやクライアントはリダイレクトされることがわかります。
            • Location: http://172.17.0.2:8081/nexus/が示されており、NexusのWebインターフェースにアクセス可能であることを意味します。
      8. docker kill quizzical_fermat
          • quizzical_fermatコンテナを強制終了します。
          • 出力:コンテナが終了したことが表示されます(quizzical_fermat)。

        まとめ:

        • この一連の操作は、NexusというサービスをDockerコンテナ内で起動し、そのサービスが正常に動作しているか確認するプロセスです。
        • run-persistent.shを実行して、コンテナをバックグラウンドで起動し、Nexusのログで動作確認を行い、最後にコンテナを停止しています。
    1. Nexusサーバのコンテナイメージをクラスルームプライベートレジストリに公開する
      1. OpenShiftクラスターにNexusサーバのコンテナイメージをデプロイする
        1. /home/student/DO285/labs/review/deploy/openshiftディレクトリにあるリソースを使用して行います。
          5.1 OpenShiftプロジェクトを作成し、セキュリティコンテキストポリシーを設定する
          5.2 Nexusサーバの永続データを格納するための永続ボリュームを作成する
          5.3 テンプレートを処理し、Kubernetesリソースを作成する
          5.4 サービスを公開するためのルートを作成する
          5.5 ブラウザを使用してNexusサーバのWebアプリケーションに接続する
          http://nexus-review.apps.lab.example.com/nexus/ URLを使って接続します。
          notion image

      評価
      OpenShiftクラスターにNexusサーバのコンテナイメージをデプロイした後、ラボ評価スクリプトを実行して作業を確認します:
      クリーンアップ
      レビューが完了したら、次のようにプロジェクトを削除し、永続ボリュームを削除します:
      これでラボは終了です。

       
      80- 第17章:導入総復習-1:総合レビュー82- 第17章:導入総復習-3:OpenShiftにマルチコンテナデプロイのラボ
      Loading...
      minami
      minami
      一个普通的干饭人🍚
      Announcement

      🎉 ブログへようこそ 🎉

      notion image
      名前:みなみ独立事務所
      性別:男
      国籍:China
      完全独学だけで基本情報をはじめ31個の資格を仕事をしながら合格。 現在はIT会社の技術担当や、ブログの執筆や学習支援などを手掛けています。 独学で合格できる学習法、勉強法、試験対策を配信します!

      📚 主な内容

      💻 IT・システム開発
      🏠 不動産 × 宅建士
      🎓 MBA 学習記録

      🔍 コンテンツの探し方

      現在、サイトのデザインはシンプルなため、情報がやや探しにくいかもしれません。
      気になるテーマを探す際は、タグ検索の利用をおすすめします。