Dockerは「Docker for Desktop」などのGUIツールでできることもありますが、どの情報をあたっても基本「コマンド操作」。
オプションがずらりと並んだDockerコマンドを見るだけで、黒い画面がニガテな私は食欲が落ちるのでした。
しかし、流行り物にはどうしても食いつきたい性格もあり、udemyでステキなDocker講座を見つけた のでチャレンジして初めて「Dockerに関して大きな勘違いをしていた」ことが理解できました。
「Docker、聞いたことはあるけどメリットがよくわからん」
って開発者には、私と同じ勘違いしてる人多いんじゃないかな〜??
趣味の個人開発でも「Docker使ってるとこんなケースで楽になるよ!」という部分も合わせてお伝えします。
Docker利用に関する大きな勘違い
私だけかもしれませんが(いや、そんなことはないはず!)、Dockerというものの”便利な使い方”をそもそも勘違いしてる方は多いのかもしれません。
私の勘違いは
Dockerでコンテナを作り、その中で開発する
という思い込み。
このあたりの勘違いを冒頭で説明したudemyのDocker講座
開発環境と実行環境の混同
私の勘違い = Dockerコンテナの中で開発
と述べましたが、
そういう開発のしかたも可能です。Blog等でそういう構築方法を指南をしているケースも見受けられますね。
しかしこれではDockerを導入するメリットが半減してしまうのです。
開発環境と実行環境って同じじゃないの?という疑問が湧くと思いますが、ここでは
- 開発環境 = ローカルなどの開発ソースを置いておく環境
- 実行環境 = 開発したソースを実行するだけの環境
と定義しておきましょう。
この2つの環境を明確に分けることで、私はどんなメリットを享受できたのでしょうか。
以下のケースで解説します。
きっと、
ほほぅ、Dockerやってみようかしら?
と思える、よくあるケースだと思います。
こんなケースでDockerの利便性を痛感!
Docker勉強したものの、個人開発でのメリットがあまりわからず、「とりあえず流行ってるし、せっかく覚えたので使うか〜」程度に使ってました。無駄にPCのストレージ食うのも「なんだかな〜」という感じで^^;
しかし、上記で解説した「開発環境と実行環境」が別れていることのメリットをがっつり享受するケースが訪れました。
Nuxt.jsでwebアプリを作成するようなプロジェクトの例です
Nodeのバージョン入れ直し
web開発をしていると、起こりがちな依存関係のエラー。
私はNuxt.jsをよく使うので、基本Nodeはltsバージョンを入れるのですが、たまにltsだと弾かれるモジュールが出現します。
例えばモジュール版の@nuxt-tailwindcss
これ、nodeのバージョンが10.13.0〜12.13.0でないと怒られるんですよね。
こんな感じで。。。
これの対処法としては「n」などのnodeのバージョン管理ツールを入れてダウングレードする方法などがあると思うのですが、もっとも手っ取り早いのがDockerfileの上書きでした。
Dockerfile
FROM node:lts-alpine
RUN apk update && \
apk add --no-cache git curl && \
curl -o- -L https://yarnpkg.com/install.sh | sh &&\
npm install -g npm && \
npm install -g @vue/cli && \
npm install -g nuxt && \
npm install -g create-nuxt-app
ENV PATH $HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH
ENV HOST 0.0.0.0
WORKDIR /app
たとえば、上記のようなDockerfileでコンテナを作成しているとして、問題のnodeのバージョンをダウングレードしたいケースでは、
以下のようにnodeの必要なバージョンを明確に指定してあげるだけで解決でした。
Dockerfile
FROM node:12.13.0-alpine
RUN apk update && \
apk add --no-cache git curl && \
curl -o- -L https://yarnpkg.com/install.sh | sh &&\
npm install -g npm && \
npm install -g @vue/cli && \
npm install -g nuxt && \
npm install -g create-nuxt-app
ENV PATH $HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH
ENV HOST 0.0.0.0
WORKDIR /app
あとは、
docker-compose up --build
コマンドで実行環境そのものを上書きしてあげることで、これまで書いてきたソースはそのままに実行環境のみ希望するものに置き換えられるのです。(ソースはローカルと同期している設定のため)なんと便利なことでしょう!
開発環境の作り直しや、モジュール・ライブラリの依存関係解消のために、新しいツールを入れてテストする必要すらなかったのでした。(あくまでも ”私のケースでは” ですが)
開発環境や実行環境は、ネットで調べた通りにコマンドを実行してもうまく行かないことも多く、環境構築でつまづき、そのままプロジェクトを断念してしまいたくなる気持ちになります。
しかし今回のケースでは、Dockerで作った実行環境化では、容易にnodeなどのフレームワークのバージョン書き換えが可能だということがわかりました。
やっとDockerでの開発のメリットを身を以て知ったのでした。
開発のたびに、いちいちdocker-compose upする手間の理由がわかると、Dockerに親しみを覚えます。
まとめ
私と同じ誤解をしていたあなた!
本稿解説のDocker利用の勘違いケースやメリットは伝わったでしょうか??
- 開発環境と実行環境の違い
- 実行環境が分離していることで、依存関係の上書きが楽になる
個人・業務に関わらず、モジュールやライブラリの依存関係のクリアって本当に骨が折れるんですよね。
Dockerをいい感じに利用して、環境構築の難易度を下げていきたいものです。
コメント