空の下でひっそりと

てきとーに更新していきます。レーザーカッターや3Dプリンタが好き

dockerでjavaの開発環境を整えてみた

parallelsによる仮想開発環境から無料で開発できる環境に置き換えたい、といわれたのでdockerでできないか調べてみました。

作りたいもの

今回は、

parallelsで仮想環境を用意」・・・macで仮想環境を用意したということだったので、真っさらな開発環境を用意する必要がありそう。

centOSを入れた」・・・OSをいれたということはそこにコマンドからJDKを入れたのかな。

「9000円くらいの課金」・・・parallelsの本体価格が8500円

この条件であればdockerでできるかな😇

なぜdocker?

javaの環境(image)が用意されているので、jdkやosのインストールが不要。手間が省ける。

コマンド1発で仮想環境(dockerではコンテナと呼ぶ)が立ち上がるので簡単。

ただcentOSではなくDebian系のosなので、絶対centOS!!!!とかだとこの案は却下😨

目次
  • 1.dockerでjavaの環境構築
  • 2.もっと効率よく開発しよう

1が説明とテスト、2は開発環境も整備した環境なので2がオススメ!

1、dockerでjavaの環境構築

まずは、dockerが必要なのでmacに公式サイトからダウンロードしてインストールします。

https://docs.docker.com/docker-for-mac/install/

正しくインストールできてるか確認👀

> docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     true

javaのイメージをローカルで使用可能にするためにpull。

> docker pull java

仮想環境を起動する。—name javatestで名前を指定、

> docker run -it --name javatest java

一応ファイルに記述したかったのでvimをインストール。osはdebianなのでaptが使える。(centOSyumと同じパッケージ管理ツール)

# apt update
# apt install vim

javaの動作確認用テストファイルを作成。

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

コンパイルしてクラスを作成、

# javac Main.java

実行。

# java Main
Hello World!

できた!

dockerで作成したコンテナにフォルダを送信する

dockerで作成した仮想環境[コンテナ]にローカルからフォルダを送信するには、docker cpを使います。scpのdocker版。

ローカル環境で実行、ローカルからdockerコンテナへファイルを送信する。

> docker cp [オプション] ローカル・パス|- コンテナ:パス
> docker cp ~/Document/javatest/Main.java:/home/share

一応開発環境はこれで整ったのですが、フォルダを送信やファイルへの変更をいちいちコマンドでやるのは大変です。

2、効率よく開発しよう✏️

問題点

エディタが使えない・・・コードの作成や編集をvimでやるのはむずい。

フォルダを送らないといけない・・・時間かかったり、送れたかの確認がコマンドでしかないので面倒。

解決方法

macのフォルダと共有させて、コード編集やファイル管理はmac上、コンパイルはdockerコンテナでやればよさそう。

ここから見る人用にはじめから解説。

macにdockerをインストール。https://docs.docker.com/docker-for-mac/install/

javaのイメージをローカルで使用可能にするpullまでは一緒。

> docker pull java

runするときに-v /path/to/macFolder:/path/to/dockerContainerFolderをつけると、macにあるフォルダとシェアさせるこができる。(正確にはホストのディレクトリをマウントする)

> docker run -v /path/to/macFolder:/path/to/dockerContainerFolder --name javasample -i -t java

ぼくの場合は、

> docker run -v ~/Documents/javatest:/home/share --name javasample -i -t java

動作確認

macの~/Documents/javatestにTest.javaのファイルをエディタで作成し設置。

f:id:yabu_sw:20190221174454p:plain:w300

dockerコンテナの/home/shareで、

# javac Test.java
# java Test
Test Hello World!

macのエディタからコードを作成し、dockerでコンパイルと実行ができました!

macで削除したファイルがdocker上で消えるか確認。一応コマンドから実行(finder上で移動・削除しても一緒)。

macの~/Documents/javatest

> ls
Test.java Test.class
> rm Test.java
> ls
Test.class

dockerコンテナの/home/share

# ls
Test.class

消えてるのが確認できた!

dockerの操作

動いてるdockerを確認する。他にも[CONTAINER ID]の確認とかに使う。

> docker ps

-aで停止しているコンテナの確認もできる

> docker ps -a

dockerを停止(docker上で実行)

# exit

dockerを停止(ローカル上で実行)

> docker stop [CONTAINER ID]

作成したdockerコンテナを起動

> docker start [CONTAINER ID]

コンテナ削除(不要になったときに使う)

> docker rm [CONTAINER ID]
まとめ

javaの実行環境だけだったら、dockerとローカルマシンに共有フォルダを作成するだけでめっちゃ簡単になった。

これで要件は満たせたかな、、、?

2/22追記 eclipsとかintelliJ使った方がやっぱよさそうだよね笑

参考文献

qiita.com

qiita.com

qiita.com

qiita.com