0
0

[Java / docker] とりあえず Docker で Java を動かしたいときc(⌒(_*˘ㅿ˘)_スヤァ

Posted at

1. 概要

  • とりあえず何でもいいから手軽に Java を実行したい
  • Docker、特に docker-compose が好き

そんな人のための記事。

2. 気を付けたこと

  • 古過ぎる Docker イメージは使わない
  • サイズがなるべく小さそうなイメージを使う
  • ただし、alpine みたいなすっからかん過ぎるイメージは、後で困ることが多いので使わない

Docker image についての補足

以下の記事によると、 OpenJDK の Docker イメージは非推奨になってしまったらしい。

上記を踏まえて、最近も更新されていそうな、 Eclipse temurin という Docker イメージを使うことにした(*˘︶˘*)フフン

3. 前提条件

OSに、以下がインストールされていて、使用できる状態であること。

  • docker
  • docker-compose

使用した Docker image は以下の通り。

  • eclipse-temurin:22-jdk

4. ソースコード

以下のようにファイルを設置した。

directory構成
./<app_root_dir>
     ├── src/  # ここに .java ファイルとかを設置する
     │     └── Main.java
     ├── Docekrfile
     └── docker-compose.yml

Dockerfile

Dockerfile
# 使用する Docker image
FROM eclipse-temurin:22-jdk

# Ubuntu package 類のインストール
RUN apt -y update && apt -y upgrade
RUN apt -y install \
    # For development and debug
    bash curl vim net-tools zip \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

# Docker container ログイン時の作業ディレクトリを指定
ARG workdir="working_dir"
WORKDIR /${workdir}

docker-compose.yml

docker-compose.yml
version: '3'
services:
  java:
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      - TZ=Asia/Tokyo
    # volumes を指定しておくことで、そのディレクトリ内の変更はLocal PC上にも反映されるようになる
    volumes:
      - .:/workdir
    working_dir: /workdir

    # Fix slow shutdown of container
    init: true

5. 実行方法

あとは、 ./<app_root_dir> 内で以下のコマンドを実行すれば、 java を利用できる container 内にログインできる。

実行コマンド
$ docker compose build
$ docker compose run java bash

# 上記コマンドの実行成功すると、以下のようなプロンプトが表示される
/workdir# 

src 以下に、おなじみの hello, world ! を実行するファイルを作成して、

Main.java
public class Main {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

次に、以下のように実行する。

# コンパイル
/workdir# javac Main.java

# 実行
/workdir# java Main.java
Hello World!

これでOK!

新しい言語を覚える時にいつも厄介なのは、環境構築と実行、デバッグ方法を調べることなのだよね₍₍ (ง ˘ω˘ )ว ⁾⁾スヤッスヤッ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0