Docker + WSL2

Docker + WSL2での開発ってできるの?という疑問を調べてみたメモ。

Dockerのコンテナを動かす部分と、イメージを格納する部分は、WSL2を使うようにできる。WSL2がある状態でDockerをインストールすると、勝手にそれを使うように設定してくれる。

インストール後にWSL2のDistroを見てみると、2つ追加されている。

PS C:\Users\choge> wsl -l -v
  NAME                   STATE           VERSION
* WLinux                 Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2

この状態で何らかのコンテナを起動すると、WSL2上にイメージがダウンロードされて、WSL2のKernelでそのイメージが動くみたい。よって、やってることは基本的にはVM立ててその中でDockerを動かしているのと同じ。ただし、スピードはだいぶ速いらしい。

開発方法としては、大きく二つありそうな感じ:

  • あくまでも実行環境 (or ビルド環境) としてDockerを使う。
    • 例えばDocker Composeとかを使って、DB+APPをまとめて動かす、といった感じ。
    • Windows環境のIDEで作ったイメージをLinux環境で動かせる? 基本は必要なものをADDして、RUNでビルドすればよいと思うけど、ものによってはビルド用のコンテナが必要なのかも?
  • 開発環境自体としてDockerを使う。
    • この場合、OS+Programming言語+Middleware+依存ライブラリなどをイメージにしておいて、そのイメージをもとにしたコンテナでシェルを起動して開発する感じ。
    • VS Codeを使っているのであれば、なんかいい感じのオプションで開発できるっぽい。

よって、Javaのアプリの開発環境をDockerでまとめて配布、とかは若干無駄な感じがする。結局IDEとか必要だし。これとかこれも、HelloWorld動かしてるだけだし・・・

NodeJSとかPythonとか、VS Codeで十分開発までできちゃうスクリプト言語の開発にはいいかも。特に pip の挙動が微妙なPythonにはちょうど良いかも。

参考資料

大体が出来上がったものをコンテナで実行してる感じ。下のアメブロの記事は、VS Codeを使ってコンテナ内で開発までやってる。

Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017

『VSCodeとDockerでSpring Boot + PostgreSQL開発環境を作る(1)』

以下のはPythonとかの開発

IntelliJ+Dockerでlocalを汚さず開発 - Qiita