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が使える。(centOSのyumと同じパッケージ管理ツール)
# 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のファイルをエディタで作成し設置。
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使った方がやっぱよさそうだよね笑