ARX CHALLENGERS BLOG技術者ブログ
ARX CHALLENGERS BLOG技術者ブログ
2024/04/15
こんにちは。hidedxです。
約束通り、3回目から間髪入れずに執筆してみました。やればできるおじさんみたいです。
何か、義務化している気がしますが、頑張っていきたいと思います。
さて、今回はローカル環境で作成したプログラムを業務環境に近い環境で動作させてみたいと思います。
さて、実際の業務で皆さんが利用している環境は大きく分けて以下ではないでしょうか?
・オンプレミス
オンプレミスとは、ソフトウェア・ハードウェアを自社で保有・管理しシステムを自前で構築する運用
方法です。2000年頃からクラウド方式が登場したことに伴い、クラウドと区別するために従来の方式を
オンプレミスと呼ぶようになりました。
・クラウド
クラウドは、従来は利用者が手元のコンピュータで利用していたデータやソフトウェアを、ネットワーク
経由で、サービスとして利用者に提供するものです。利用者側が最低限の環境(パーソナルコンピュータ
や携帯情報端末などのクライアント、その上で動くWebブラウザ、インターネット接続環境など)を用
意することで、どの端末からでも、さまざまなサービスを利用することができます。
これまで、利用者はコンピュータのハードウェア、ソフトウェア、データなどを、自身で保有・管理し
利用していました。しかしクラウドサービスを利用することで、これまで機材の購入やシステムの構築、
管理などにかかるとされていたさまざまな手間や時間の削減をはじめとして、業務の効率化やコストダウンを
図れるというメリットがあります。
出典:https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/basic/basic_service_13.html
どちらもメリット、デメリットありますが、最近の人気はクラウドを利用するパタンがほとんどでは
ないでしょうか? ただ、個人情報を扱う場合や、自社で自由にカスタマイズ、拡張したい場合は、
オンプレミスを利用する傾向にあるみたいです。
また、業務環境で利用する、基本ソフトウェア(OS)としては、LinuxかWindowsを利用する場合が
ほとんどで、特にLinuxを利用する場合が多いのではないでしょうか?
・Linux
Linuxは、狭義にはLinuxカーネル、広義にはそれをカーネルとして用いたオペレーティングシステムを指す。LinuxはUnix系(英: Unix like、Unixライク)オペレーティングシステム (OS) の1つとされる。カタカナでは「リナックス」と表記されることが多い。Linuxは、スーパーコンピュータ、メインフレーム、サーバ、パーソナルコンピュータ、スマートフォン、組み込みシステム(携帯電話やテレビなど)など、幅広い種類のハードウェアで使用されている。
出典: https://ja.wikipedia.org/wiki/Linux
・Windows
Microsoft Windows(マイクロソフト ウィンドウズ)は、マイクロソフトが開発・販売するオペレーティングシステム (OS) の製品群である。グラフィカルユーザインタフェース (GUI) を採用している。Windows発売以前では高価なワークステーション(ハイエンドパソコンを上回る性能のデスクトップコンピュータ)でしか実現されていなかったマルチタスクやGUIを中心とした使い勝手の良さを、一般消費者が入手しやすい標準的な規格のパソコンに順次取り込んで行き、一般向けOSのシェアのほとんどを占めるに至り、今や大きな知名度を持っている。
出典: https://ja.wikipedia.org/wiki/Microsoft_Windows
さて、オンプレミス/クラウドを開発環境として利用するには、有料なために敷居が高そうですね。
そんな時のためには「コンテナ」環境を構築して仮想業務環境として利用しましょう。
コンテナは、アプリケーションを実行するための実行環境をパッケージ化した技術です。
具体的には、以下の特徴があります
・アプリケーションと依存関係のまとまり
コンテナはアプリケーションとその依存関係(必要なライブラリや設定など)を一つのまとまりにします。
・軽量でスケーリング可能
コンテナは軽量であり、スケール可能な形式でパッケージ化されます。
これにより、アプリケーションの環境に依存せず、どんな環境でも同じように動作させることができます。
・従来のサーバ仮想化との違い
従来のサーバ仮想化では各仮想マシンが独立した実行環境を持ち、それぞれにゲストOSが内包されています。
一方、コンテナはゲストOSを含まず、サーバのホストOS上で直接動作します。
これにより、コンテナは軽量で高速な実行が可能であり、サーバのリソースを効率的に利用できます。
また、コンテナはOSのバージョン違いの混在も可能です。同OSファミリーであれば、異なる
バージョンのOSやディストリビューション(各社の配付パッケージ)を共有して実行できます。
ただし、異なるOS(例:LinuxとWindows)の混在は不可能です
それでは、業務でよく使う、Linuxをコンテナで、利用PC(Windows)上に構築するにあたり、調査してみましょう。
調べてみると以下を利用して構築できるみたいです。
※私調べ。他にもあるかもしれませんが。
・Docker Desktop for Windows ( https://docs.docker.jp/docker-for-windows/ )
WindowsやMacOSなどのオペレーティングシステム上で簡単にDocker環境を構築できるツール。
専用のGUIを通じてコンテナの稼働状況の確認やコンテナの停止、再開、廃棄などの作業を行えます。
ただし、コンテナの作成などの作業はPowerShellやコマンドプロンプトなどのコマンドライン上で行う
必要があります。2022年5月からはLinuxにも対応しています。Docker Desktopは元々無料で提供
されていましたが、2021年9月から有料となりました。個人利用や特定の条件を満たす企業・団体には
引き続き無料で利用できます。有料プランにはPersonal、Pro、Team、Businessの種類があり、
それぞれ異なる機能と価格を提供しています。
・Podman Desktop ( https://podman-desktop.io/ )
Podman Desktopは、コンテナエンジンであるPodmanのGUIツールです。
Podman Desktopにより、Podmanコンテナの起動や停止、ビルドなどの操作を画面から行うことが
できます。 Podman*1はDockerと互換性があります。
*1 Podman
https://www.redhat.com/ja/topics/containers/what-is-podman
・Rancher Desktop( https://rancherdesktop.io/ )
Rancher Desktop は、デスクトップ上でコンテナ管理と Kubernetes *2を提供するアプリです。
Mac (Intel と Apple Silicon の両方)、Windows、Linux で利用できます。
*2 Kubernetes
https://ja.wikipedia.org/wiki/Kubernetes
さて、どれを選択するかですが、有料である、Docker Desktop for Windowsは対象外として、
Podman Desktop (Docker)を利用するか、Rancher Desktop (Kubernetes)を利用するかですね。
簡単に比較してみます。
また、もう少し詳しく調べてみて、Rancher Desktopを採用することにしました。
一番大きいのはVisual Studio Codeとの連携でしょうか。
採用理由:
・Docker CLI が使用できる
・Docker Desktop と同じ操作性で使用できる
・Docker Compose が使用できる
・Visual Studio Code との連携も問題なくできる
それでは、Rancher Desktopをインストールしていきましょう
1.ダウンロード
公式サイト( https://rancherdesktop.io/ )からダウンロードします。
2.インストール
ダウンロードしたインストーラを実行します。指示に違って進めていってください。
※ここでは詳細は割愛します。
完了すると、以下のようなアイコンがデスクトップに作成されますので、実行します。
以下のような画面が表示されたら、「OK」ボタンを押下して、
PowerShell(管理者モード)で「wsl –install」を実行してください。 途中、再起動が発生します。
以下の画面が表示されたら、そのまま「OK」ボタンを押下してください。
3.確認
以下の画面が表示されたら、PowerShellで「docker images」を実行してエラーがでなければ インストール成功です!
Docker環境も構築できたので、Visual Studio Code上でDockerを利用していきましょう。
1.拡張機能の「Remote-Containers」をインストール
2. 設定ファイル作成 Dockerコンテナ用の設定ファイルを作成します。ファイル名Dockerfileで作成してください。
今回はコンテナ実行した場合、「Hello, World!」と表示されるように記載します。
この他にも様々な設定を記載できるのですが、興味がある方は、以下のサイト等を参照してみてください。
https://docs.docker.jp/develop/develop-images/dockerfile_best-practices.html
3.実行
では、作成した設定ファイルを実行してみましょう。
F1キーを押下して、「Dev Containers: Open Folder in Container」を指定して検索してください。
「開発コンテナ―:コンテナーでフォルダを開く」を選択すると、フォルダ選択画面が表示されるので、
Dockerfileを置いたフォルダを選択して「OK」ボタンを押下してください。
選択後、「ユーザデータフォルダーに構成を追加する」→「Dockerfileから」→「OK」ボタンを 押下してください。
リモート接続が開始されて、Dockerfileが実行されるのですが、今回利用したPCでは以下エラーが 発生してしまいました。
こんな時は、絶望せずに別の方法で実行しましょう。ポジティブシンキングです。
Visual Studio Code上でターミナルを開いて、「docker build ./ -t sample:test」実行してください。
コンテナイメージを作成します。
エラーが発生しなかったら、「docker run –rm -t sample:test」を実行して、コンテナイメージを指定して、コンテナを起動します。
「Hello, World!」が表示されたら成功です。
準備が整いましたので、前回作成した、REST APIをDocker上で動作させましょう。
1.WARファイル作成
WARファイルは、JavaベースのWebアプリケーションやコンポーネントを圧縮した形式で、
Webサーバ上で動作するものです。ApacheのTomcatのようなWebアプリケーションを導入した
Webサーバ上で動作させることができます。
Visual Studio Codeのターミナル上で、mavenプロジェクト配下で、「mvn clean install」を
実行してください。そうするとtarget配下にWARファイルが作成されます。
今回は「webapp-1.0.war」という名前で作成しました。名前等はpom.xmlで指定できます。
pom.xmlの記載方法については以下を参考にしてみてください。
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
2. Dockerfile作成 WARファイルを実行するために、Apache Tomcat上で動作させたいと思います。 https://hub.docker.com/_/tomcatからベースとなるコンテナイメージを選択記載していきます。
1行目:FROMでベースイメージを記載します。今回はtomcat:9.0-jdk21を利用します。
※ Ubuntu(Linux)上でTomcatが動作する。
2行目:既存WARファイルがあれば削除します。
3行目:target配下のWARファイルを、コンテナ内の/usr/local/tomcat/webapps配下にコピーします。
3. コンテナイメージ作成および実行
まず、コンテナイメージを作成します。「docker build ./ -t webapp:1.0」
次にコンテナを実行します。「docker run -p 8080:3000 -d webapp:1.0」
-p 3000:8080 :コンテナのポート8080をPCのポート3000に転送します。
-d :バックグランドで起動します。
では、「Rest Client」でcurl実行してみましょう。 URLは http://localhost:3000/webapp-1.0/api/dataになります。
Tomcatの設定はデフォルト にしているので、チューニングしたい方はDockerfileの中身を修正してみてください。
前回と同じようにJSONの結果が返却されることを確認できましたね!
作成したものを仮想業務環境で動作させることができました。感慨深いものですね。
Apache Wicketを利用して、開発 – 構築 – 動作確認まで一連の流れでご紹介してきました。
読者の皆さんの中には、コーディングだけやりたい、構築だけやりたいという方も
いらっしゃると思いますが、最近は自分で使う環境は自分で用意するが当たり前になってきました。
スキルに偏りを持たせず、トータル的に身に着けていくようにしてみてください。
さて、Apache Wicket編は今回で終了になりますが、Apache Wicketに興味もたれましたら
これ幸いです。次回にまた何かの技術を紹介してみたいと思いますので、少々お待ちください!
hidedx