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!
- Nexusサーバをコンテナ化するためのDockerfileを作成する
/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は次のようになります:
- get-nexus-bundle.shスクリプトを使ってNexusサーバのファイルをイメージディレクトリに取得する
取得後、nexusというタグでコンテナイメージをビルドします:
- 提供されたrun-persistent.shシェルスクリプトを使って、Dockerでイメージをテストする
cd /home/student/DO285/labs/review/deploy/docker
docker
ディレクトリに移動します。./run-persistent.sh
run-persistent.sh
スクリプトを実行します。このスクリプトは、Dockerコンテナをバックグラウンドで起動し、必要なディレクトリを設定します。- 出力:コンテナID(例:
80970007036bbb313d8eeb7621fada0ed3f0b4115529dc50da4dccef0da34533
)が表示されます。 docker ps
- 現在実行中のDockerコンテナの一覧を表示します。
- 出力:コンテナが正常に起動したことを確認できます。
- コンテナID:
80970007036b
- イメージ:
nexus
- コマンド:
sh nexus-start.sh
- ステータス:
Up 4 seconds
(起動してから4秒) - 名前:
quizzical_fermat
docker logs -f quizzical_fermat
quizzical_fermat
という名前のコンテナのログを表示し、リアルタイムで更新を追跡します。- 出力:Nexusが正常に起動している様子がログに表示されます。
- NexusのWebサーバーがポート8081で起動し、Jettyサーバーが開始されていることが確認できます。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' quizzical_fermat
- 実行中のコンテナ(
quizzical_fermat
)のIPアドレスを取得します。 - 出力:コンテナのIPアドレスは
172.17.0.2
です。 curl -v 172.17.0.2:8081/nexus/
- コンテナ内で実行中のNexusサーバーにHTTPリクエストを送信し、応答を確認します。
- 出力:
- HTTPレスポンスコード
302 Found
が返され、ブラウザやクライアントはリダイレクトされることがわかります。 Location: http://172.17.0.2:8081/nexus/
が示されており、NexusのWebインターフェースにアクセス可能であることを意味します。docker kill quizzical_fermat
quizzical_fermat
コンテナを強制終了します。- 出力:コンテナが終了したことが表示されます(
quizzical_fermat
)。 - この一連の操作は、NexusというサービスをDockerコンテナ内で起動し、そのサービスが正常に動作しているか確認するプロセスです。
run-persistent.sh
を実行して、コンテナをバックグラウンドで起動し、Nexusのログで動作確認を行い、最後にコンテナを停止しています。
/home/student/DO285/labs/review/deploy/docker
ディレクトリに移動し、コンテナ名をdocker psコマンドで確認した名前に置き換えます:説明:
まとめ:
- Nexusサーバのコンテナイメージをクラスルームプライベートレジストリに公開する
- OpenShiftクラスターにNexusサーバのコンテナイメージをデプロイする
/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を使って接続します。
評価
OpenShiftクラスターにNexusサーバのコンテナイメージをデプロイした後、ラボ評価スクリプトを実行して作業を確認します:
クリーンアップ
レビューが完了したら、次のようにプロジェクトを削除し、永続ボリュームを削除します:
これでラボは終了です。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1abd7ae8-88e2-8027-ad95-e4f08c442ffd
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章