LoginSignup
38
31

More than 5 years have passed since last update.

IntelliJ IDEAをDocker for Macと連携させる方法

Last updated at Posted at 2016-12-04

IntelliJでDockerコンテナを起動停止できるようにする方法自体は、既に「IntelliJのDockerインテグレーションを使う」等で紹介されています。Docker for Macを使った方法がなかなか見つからなかったので、本記事で紹介します。

記事中の例は、maven-archetype-webappアーキタイプを使って作成したMavenプロジェクトを、GlassFishの公式コンテナイメージ(glassfish/server)を元に作成されたコンテナで実行する想定となっています。適宜ご自身の環境に読み替えてください。

2017.1リリースに伴い、手順を更新しました。2016.3以前から2017.1にアップデートしたら、Docker Integrationプラグインを更新してIntelliJを再起動しましょう。 (2017.03.23)

socatの導入(2016.3以前の場合のみ)

boot2dockerの頃と異なり、Docker for Macは、Unixソケットを使ってDocker Remote APIと連携する方式となっています。しかし、2016.3以前のDocker IntegrationではUnixソケットを使えません。後述のAPI URLにソケットのURIを入れても、エラーとなります(IDEA-159223)。

この問題を回避するために、socatを使い、TCPで要求を受け付ける窓口を作っておきます。

  • インストール
$ brew install socat
  • 起動(ポート8099で待ち受ける場合)
$ socat TCP-LISTEN:8099,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock

必要に応じて&nohupをつけてください。

IntelliJとDocker for Macの連携設定

Dockerと連携するプラグインを入れて、IntelliJをDocker for Macと連携させます。

Dockerと連携するプラグイン(Docker Integration)の導入

Preferencesを開きます。Plugins画面で、Install JetBrains plugin...ボタンをクリックし、Docker integrationプラグインをインストールし、IntelliJを再起動します。

環境設定

もう一度Preferencesを開きます。Build, Execution, Deployment->Clouds画面で、+ボタンをクリックして、プルダウンメニューからDockerを選択します。

環境設定1

boot2docker前提での初期値が色々表示されますが、Docker for Macでの設定に直します。

  • API URL:には、unix:///var/run/docker.sockを設定
    • 2016.3以前の場合はtcp://localhost:8099を設定
  • Certificates folder:は、空欄
  • VirtualBox shared folders欄のエントリを削除

環境設定2

API URL:入力後、Docker for Macとの通信テストが行われます。成功すると、Connection Successfulと表示されます。

コンテナの設定(第一段階)

まずは、アプリケーションをデプロイしていないコンテナを立ててみます。

コンテナ起動設定の作成

Run->Edit Configurations...より、Run/Debug Configurations画面を開きます。+をクリックし、Docker Deploymentを選択します。

コンテナ起動設定1

設定を編集します。

  • Image ID:に、作成しているアプリを動かすコンテナのベースイメージを指定
  • Container name:に、コンテナの名前を指定

以下の例では、GlassFishの公式コンテナイメージ(glassfish/server)をベースイメージに指定しています。

コンテナ起動設定2

アプリケーションサーバー系なら、この例のように、Open browserで管理コンソールを開く設定を入れておくと良いでしょう。

Containerタブで、ポートフォワーディング設定を行います。今回の例では、GlassFishの管理コンソールのポート(4848)だけを使えるようにしています。

コンテナ起動設定3

ベースイメージの取り込み

現在のDocker Integrationは、ベースイメージがローカルにない場合、自動でpullせずにエラーとなります(IDEA-158324)ので、あらかじめpullしておきます。

Dockerツールタブを開き、一番上の要素を選択した状態で、図のアイコンをクリックします。

pull

Repositoryに、ベースイメージの名前を入れて、OKをクリックします。

スクリーンショット 2016-12-04 14.32.32.png

ダウンロードが完了すると、Imagesの中に、ベースイメージが表示されます。

スクリーンショット 2016-12-04 14.34.27.png

実行

Dockerツールタブを開いて、先ほど作成したコンテナ起動設定を実行します。Containersの中に青く塗りつぶされた四角のアイコンで、先ほど指定した名前のコンテナが現れていれば、成功です。

Dockerツールタブ

Open browserを設定した場合は、コンテナ起動後、ブラウザが開きます。ただし、アプリケーションサーバープロセスの起動が完了する前にブラウザが開かれ、404エラーが表示されてしまうことが結構あります。その場合は、しばらく待ってリロードしてみましょう。

ブラウザ表示

コンテナの設定(第二段階)

ここまでは、ある意味、練習です。これから、実際に作成したアプリをデプロイする設定を行います。

Dockerfileの作成

プロジェクトルート直下にDockerfileを作成します。少なくとも、以下の設定は必要です。

  • ベースイメージを継承する記述
  • 生成物を然るべき場所に配置する記述

GlassFishの場合、domain1というドメインが作成されます。ドメインディレクトリ内のautodeployディレクトリにwarファイルを格納すれば、アプリが実行されるようになります。

Dockerfile
# ベースイメージを継承
FROM glassfish/server:latest

# GlassFishのオートデプロイディレクトリに、warファイルを配置
ADD ["target/DockerTest.war", "/glassfish4/glassfish/domains/domain1/autodeploy"]

ADDコマンドでは、Dockerfileが置いてある位置からの相対位置でソースファイルの格納位置を指定します。

コンテナ起動設定の修正

先ほど作成した起動設定を開き(もしくは複写して)、以下のように修正していきます。

  • Deployment:Dockerfileに変更
  • Image tag:に、このDockerfileで作成されるコンテナイメージの名前を指定
  • Container name:に、コンテナの名前を指定
  • Open browser:に、アプリのトップページとなるURLを指定(アプリケーションサーバの場合)
  • コンテナ起動前のビルド設定を追加

コンテナ起動設定修正1

この例では、Mavenのpacakgeフェーズの起動設定を作成しておいてから、この画面でRun Another Configurationを選択して追加しています。

Containerタブで、ポートフォワーディング設定を必要に応じて追加します。この例では、GlassFishのドメインポート8080を追加しています。

コンテナ起動設定修正2

実行

以前に作成したコンテナを削除してから、再実行します。プロジェクトのビルドが行われ、warファイルが作成された後で、Dockerコンテナが起動します。

Dockerツールタブ

Open browser:を指定している場合は、起動するとブラウザが開きますが、ほとんどの確率で404となっています。アプリケーションサーバーの起動とWebアプリのデプロイが完了するまでに時間がかかるためです。しばらくしてリロードすると、表示されるようになるはずです。

ブラウザ表示

38
31
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
38
31