Dockerを使用してシンプルなJava開発およびコンパイル環境を構築する方法の詳細な説明

Dockerを使用してシンプルなJava開発およびコンパイル環境を構築する方法の詳細な説明

Java 言語には多くのバージョンがあります。一般的に使用されている Java 8 に加えて、一部のレガシー プロジェクトでは Java 7 が使用され、一部の新しいプロジェクトでは Java 10 以降が使用される場合があります。ローカルの Java 開発環境を切り替える場合は、ある程度の時間がかかり、将来的に異なるバージョンを切り替えるたびに切り替えを行う必要があります。

Docker の登場により、開発環境やコンパイル環境のさまざまなバージョンを簡単に維持できるようになりました。Docker が何なのかわからない場合は、Docker の概要をお読みください。 Java開発環境を構築するには2つの方法があります。1つはコンテナ内でコンパイルして実行する方法、もう1つはコンテナ外でコンパイルして実行する方法。それぞれやり方を見ていきましょう。

準備: まず、Docker がインストールされていることを確認します。都合がよければ、 openjdk:8イメージを事前にプルダウンして、全員の時間を節約することもできます。この記事はmacOS 10.15.7、Docker 19.03.8の環境で検証されています。

コンテナ内でコンパイルして実行する

この記事では、簡単な Helloworld プログラムを例に挙げます。プロジェクトのファイル ディレクトリ構造とコードは次のとおりです。

$ ls -lh
合計 24
-rw-r--r-- 1 shiqiang スタッフ 60B 11 11 19:02 Dockerfile
-rw-r--r-- 1 shiqiang スタッフ 123B 11 11 19:02 Helloworld.java

コードの内容。

パブリッククラスHelloWorld {
 パブリック静的void main(String args[]) {
 System.out.println("こんにちは世界。\n");
 }
}

上記の準備が完了したら、Dockerfile の内容を編集できます。

FROM openjdk:8 #openjdk:8 に基づいてイメージを構築します COPY . /usr/src/myapp #ディレクトリ内のコードをイメージ内の /usr/src/myapp の場所にコピーします WORKDIR /usr/src/myapp #/usr/src/myapp を作業ディレクトリとして設定します RUN javac Helloworld.java #コンパイル コマンドを実行して Helloworld.java プログラムをコンパイルします CMD ["java", "Helloworld"] #コンパイルされた Helloworld を実行します

イメージファイルをビルドします。

java_in_docker_env_8 を実行します。 
$ docker images # docker imagesコマンドを使用して、ビルドされたjava_in_docker_env_8イメージを確認します

コンテナを実行します。

$ docker run -it --rm java_in_docker_env_8
こんにちは世界。

$ ls -lh     
合計 24
-rw-r--r-- 1 shiqiang スタッフ 112B 11 12 10:53 Dockerfile
-rw-r--r-- 1 shiqiang スタッフ 123B 11 12 10:49 Helloworld.java

プログラムの出力を確認し、現在のディレクトリにコンパイルされていない結果があるかどうかを確認できます。しかし、この方法ではコンテナを起動するたびにコンパイルする必要があり、コンパイル結果を共有する方法がありません。次のセクションでは、コンパイル結果をコンテナ外に保存する方法について説明します。

コンテナ外でコンパイルして実行する

作業ディレクトリとコードの準備は前のセクションと同じですが、Dockerfile ファイルは前のセクションとは少し異なります。

openjdk:8より
コピー . /usr/src/myapp
ワークディレクトリ /usr/src/myapp

イメージファイルをビルドします。

$ dockerビルド -t java_env_8
$ docker images # docker imagesコマンドを使用して、ビルドされたjava_env_8イメージを確認します

ファイルをコンパイルします。

$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 javac Helloworld.java
$ ls -lh # コンパイルされた結果の合計32が表示されます
-rw-r--r-- 1 shiqiang スタッフ 112B 11 12 10:53 Dockerfile
-rw-r--r-- 1 shiqiang スタッフ 427B 11 12 11:09 Helloworld.class
-rw-r--r-- 1 shiqiang スタッフ 123B 11 12 10:49 Helloworld.java

プログラムを実行します。

$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java_env_8 java Helloworld 
こんにちは世界。

最後に

この記事では、単純な Java 開発環境のみを構築します。この方法を使用して Java プログラムをコンパイルして実行する利点は、JDK をローカルにインストールする必要がないことです。これは、複数の JDK バージョンのプログラムをコンパイルする必要がある場合に便利です。しかし、複雑なプロジェクトは Maven や Gradle を使用して構築されることが多いです。そのようなプロジェクトも、この記事で紹介した方法で構築できるでしょうか? 次回の記事もお楽しみに。また、公式アカウントをフォローして、最新の記事をプッシュで受け取るのもお勧めです。

参考資料Docker - Java 開発環境の作成

Docker を使って簡単な Java 開発およびコンパイル環境を構築する方法についての記事はこれで終わりです。Docker を使って Java 開発およびコンパイル環境を構築する方法の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerでJavaプログラムを起動する方法
  • Docker で Java 8 Spring Boot アプリケーションを開発する方法
  • Dockerを使用してJava環境を構築する手順
  • Javaデータ開発補助ツールDockerと一般プログラムの使い方

<<:  MySQLのFreeListメカニズムの詳細な説明

>>:  JavaScript 配列重複排除問題の詳細な研究

推薦する

MySQLスケーラブル設計の基本原則

目次序文1. スケーラビリティとは何ですか?スケールアウトの利点:スケールアウトのデメリット:スケー...

Linux usermod コマンドの使用

1. コマンドの紹介usermod (ユーザー変更) コマンドは、ユーザー アカウントを変更するため...

MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

問題: MySQLテーブル内の自動増分IDのオーバーフローによりビジネスブロックが発生した背景: t...

CSSの2つの特別な値は、カスケードの継承と初期メソッドを制御するために使用されます。

カスケードを制御するために CSS の任意のプロパティに割り当てることができる特別な値が 2 つあり...

KVM ベースの SRIOV パススルー構成とパフォーマンス テストの詳細な説明

SRIOVの導入、VFパススルー構成、パケット転送速度性能テスト目次1. SRIOVの紹介2. 環境...

CSSはリストのスタイルを設定し、ナビゲーションメニューの実装コードを作成します。

1. リストシンボルを設定するlist-style-type: attribute; //リストの...

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

MySQL インデックスの原理と最適化の詳細な説明

序文この記事は Meituan の大物によって書かれました。とても素晴らしいので、皆さんと共有したい...

MySQL データ型の最適化の原則

MySQL は多くのデータ型をサポートしており、高パフォーマンスを得るには適切なデータ型を選択するこ...

Oracle10パーティションとMySQLパーティションの違いの詳細な説明

一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 2

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...

Centos7にGitLabサーバーをインストールして展開する方法

私はここでCentOS 7 64ビットシステムを使用しています。CentOS 64ビットシステムを試...

HTML テーブル マークアップ チュートリアル (18): テーブル ヘッダー

<br />ヘッダーはテーブルの最初の行を参照します。ヘッダー内のテキストは中央揃えで太...

MySQL 最適化ソリューション リファレンス

最適化によって発生する可能性のある問題最適化は必ずしも単純な環境で実行されるわけではなく、実稼働環境...