1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker Hubのイメージ(コンテナ)をWSL2にインポートする方法

Posted at

これでDocker Hubから好きな環境ツカエル

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

関連ページ


------------------- ↓ 余談はここから ↓-------------------

WSL2を構築する上で使っていたUbuntuだが、
やっぱりちょっと重いなぁという印象がある。
PHPStorm自体をLinux上に置くとなると、
どうしてもLinux自体の重さが影響してくる。

最近の開発は動作環境はdocker上にあるのなら、
開発環境のLinux自体はUbuntuでなくても良いはず。

ということで前回苦戦したAlpineでの構築を再度試みる。
ただ何度か試したところNodeJSの最新版をインストールすることができなくて途方に暮れていた。

(・ω・) どうしよ・・・
あ、Dockerでalpine-nodeの最新版からWSLのディストリビューションを作れればいいんでない?

実は、Alpine WSLは実体を持たず、
インストーラーだけがパッケージされていて、
公式サイトのstable版が動的にインポートされる形になっている。

(゚_゚) だったらdockerから作れるんじゃね?

試しにやってみたらなんとかなったので記録しておく。
前提として

  • Docker Desktop(Edge版)インストール済み
  • WSL2が動作する(令和2年5月9日現在Insider Preview版)

------------------- ↓ 本題はここから ↓-------------------

Docker Hubよりコンテナ作成

この辺Dockerに未だに詳しくない私なので、
違ったら指摘してほしい。

Dockerコンテナ作成

Docker Hubより目的に合ったものを探す。
今回は最新のNodeJS14のAlpineLinuxという組み合わせでいく。

https://hub.docker.com/_/node?tab=tags
tag: node:14-alpine

PowerShellで実行

PS C:\> docker run -it node:14-alpine /bin/ash
/ # node -v
v14.2.0
/ # npm -v
6.14.4
/ # exit

DockerコンテナをOSイメージ化

コンテナをWSLインポートするためにOSイメージ化する
saveではなくexportを使用

PS C:\> docker ps -a # コンテナIDを表示
CONTAINER ID IMAGE COMMAND  
09e4abfaf0f4 node:14-alpine "docker-entrypoint.s…"
PS C:\> docker export 09e4abfaf0f4 -o alpine-node.tar

WSLインポート

WSLインポートでOSイメージをWSL側に登録する。
OS名をAlpine、インストール先をC:\Alpineとすると

PS C:\> wsl --import Alpine C:\Alpine alpine-node.tar
PS C:\> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop         Running         2
  Alpine                 Stopped         2
  docker-desktop-data    Running         2

早速起動してみる

PS C:\> wsl -d apline
# cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.11.6
PRETTY_NAME="Alpine Linux v3.11"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"

(・∀・) 意外と簡単だったね!

node入れるのに苦労したから、
今後はこれで使っていこう。

DebianのSlimバージョンでもやってみたらうまくいった。
なかなか使い勝手は良さそうだ。


------------------- ↓ 後書はここから ↓-------------------

ここからは初期設定の手順を残しておく。
やり方は人それぞれなので参考程度に。
OSはAlpine Linuxのまま。

ユーザー追加

最初に通常使うユーザーの追加とパスワードを設定しておく。
ユーザー名をnewuserとすると

# adduser newuser
New password:
Retype new password:
passwd: password for dozo changed by root
# addgroup newuser wheel

sudoなど初期で必要なパッケージをインストール

# apk add sudo openssl-dev pkgconf shadow alpine-conf wget curl
# visudo

以下の行のコメントアウト(#)を消す

# %wheel ALL=(ALL) ALL

再起動

いったんWSLごと再起動し、
sudoのテストも実行。

PS C:\> wsl -t alpine
PS C:\> wsl -d alpine -u newuser
$ sudo test

WSL設定

この時点でネットワーク不良に陥っているので、
各種設定で調整していく。

wsl.conf設定

# vi /etc/wsl.conf
[automount]
enabled = true
options = "metadata, umask=22, fmask=11"
mountFsTab = false
crossDistro = true

[network]
generateHosts = false
generateResolvConf = false

[interop]
appendWindowsPath = false

[user]
default=newuser

resolv.conf設定

$ sudo setup-dns -d localhost -n 8.8.8.8

もう一度再起動

WSLごと再起動し、デフォルトユーザーが切り替わっているかを確認。

PS C:\> wsl -t alpine
PS C:\> wsl -d alpine

最新の環境を設定する

リポジトリをEdgeに変更

Alpine LinuxにはStableバージョンとしてV3.11のようなバージョン番号がついているが、
Latest扱いのEdgeというリポジトリがあるのでそちらを使う。

/etc/apk/repositoriesを以下のように変更

$ cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community

パッケージを更新、最新に変更

$ sudo apk update
$ sudo apk upgrade

開発環境をインストール

コンパイラ系のパッケージを一式、
その他開発系のパッケージを追加。

$ sudo apk add build-base git

PHPStormのインストール

Javaのインストール

PHPStormを動かすためにJREを別途インストールする

$ sudo apk add openjdk11-jre
$ java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+11-alpine-r1)
OpenJDK 64-Bit Server VM (build 11.0.6+11-alpine-r1, mixed mode)

PHPStormのインストール

$ wget https://download.jetbrains.com/webide/PhpStorm-2020.1.1.tar.gz
tar xvf PhpStorm-2020.1.1.tar.gz -C ~/opt/

X11のインストール

DISPLAY値の設定

$ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0" >> ~/.bashrc

テストアプリを実行

$ sudo add xeyes
$ xeyes &
/etc/hosts
54.72.98.183 download.jetbrains.com

Dockerのお掃除

Dockerを使うとゴミが大量発生するので
まとめて削除で綺麗にしておこう。
(※必要なものまで消さないように)

$ docker rm $(docker ps -aq)
$ docker rmi $(docker images -aq)
1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?