手軽にIonicをdockerで動かしてさわってみたいときのためのメモ。
Dockerfileを用意してあげるとIonicが起動できました。手抜きでAndroid SDKはいれてないので、Cordovaによるスマホアプリ作成はできません。Webアプリだけになります。ただ、Ionicを手軽に試してみたいなら、これで充分。(2018-03-05 macOSだと動かないのと、Linuxでもuid 1001のユーザーだと動かないのでDockerfileとdocker buildコマンドの引数を修正。)
FROM node:8.9.4-alpine ARG HOST_USER_ID=1000 ARG HOST_GROUP_ID=1000 ARG USER_NAME="node" ARG USER_EMAIL="node@localhost.localdomain" WORKDIR /usr/src/app RUN apk update && \ apk add -q shadow && \ apk add -q git && \ groupmod -g ${HOST_GROUP_ID} node && \ usermod -u ${HOST_USER_ID} node && \ npm i -g --unsafe-perm cordova --no-progress && \ npm i -g --unsafe-perm ionic --no-progress && \ su - node -c "git config --global user.name $USER_NAME" && \ su - node -c "git config --global user.email $USER_EMAIL" && \ su - node -c "ionic --no-interactive config set -g daemon.updates false"
Alpineをベースとしているのでイメージの容量が小さくて済んでいます。シェルはbashではなくshなので注意。
ここでは「-u」でユーザーID, グループIDを指定することで生成されるファイルの所有者がrootにならないようにしています(dockerコマンドを実行するユーザーのユーザーID、グループIDを指定するために”$(id -u $USER):$(id -g $USER)”を指定してます)。macOSではHOST_GROUP_ID=$(id -g $USER)の行は必要ないようです。
$ docker build \ --build-arg HOST_GROUP_ID=$(id -g $USER) \ --build-arg HOST_USER_ID=$(id -u $USER) \ --build-arg USER_NAME=user001 \ --build-arg USER_EMAIL="user001@example.jp" \ -t sssg/ionic . $ docker run -it -p 8100:8100 \ -u $(id -u $USER):$(id -g $USER) \ -v ${PWD}:/usr/src/app \ -w /usr/src/app --name ionic-app001 --rm sssg/ionic sh
Dockerコンテナのシェルに入ったら、ionic startでアプリを作って、serveで起動。
$ ionic start app001 blank $ cd app001/ $ ionic serve
http://localhost:8100/ でIonicアプリにアクセスができます。http://localhost:8100/ionic-lab を開くとAndroid, iOSの画面イメージも確認できます。