Dockerはなぜ難しいのか
Dockerって難しい。最近ようやく人並みに扱えるようになってきたのではないかと思うが、最初の頃はREADMEに書いてある通りにdockerコマンド叩いてもなかなかうまくいかず、エラーも自力で解消できずで、なにやっても自信なくて苦手だった。
一度わかるようになってみると、何が難しかったのかよく分からなくなってしまったので、改めて整理しておこうと思った。
こういうのが誰かに教えたり説明したりするときに役立つ。
Dockerのとっつきづらさ
Dockerのコンセプトとコンテナに対してのざっくりした理解が必要(なぜこれがあると嬉しいのか?)
ざっくり、がどこまでのことなのかが難しいという問題も
Dockerの基礎的な知識を習得しよう!となって参加した何かのハンズオンとか購入した本で、Dockerデーモンの話とかDockerそのものの実装の詳細が出てきて「これじゃない感」
もちろん理解しておくのは大事だけど、私にとっては実際に使うときの困り感を解消するのに役立つ感覚が得られなかった
そんなこといいからDockerfile自分で書いて環境構築できるようになりたい、と思っていた
コンテナ内の作業とローカル環境の作業の区別がつきづらい
特に最初は言われるがままにコマンドを打つ作業になるので、どこで何やってるかを簡単に見失っていた
作業コマンドがdockerコマンドとdocker composeコマンドで微妙に違う
覚えたと思ったのに違う、という感じになった
OSの知識、ミドルウェアの知識、各種ライブラリのバージョン管理に関する知識が必要
苦手分野(とか後回しにしてきたとこ)がギュッとなってる感じ
docker環境立ち上げてなんとなく使うことはできても、新規で作ったり構築しなおしたりできない
結局やってみるしかない
こういうエントリがあった。激しく同意だった。
本番環境で動かすなら ECS だとか Kubernetes だとか Nomad だとか Swarm だとか、考えるべきところはいろいろある。だけどそこまで行くとインフラエンジニアと協業する枠で、アプリケーションエンジニアだけのものという感覚がない、と個人的には感じる。
一方で、Docker は既に完全にアプリケーションのものだと思う。アプリケーションの実行環境はアプリケーションが規定するべきだし、そのコストは Docker を学ぶこと以外存在しない。アプリケーションの実行環境はインフラエンジニアが「用意するもの」ではなく、開発者が自分たちで「規定するもの」であり、そして変化するソフトウェアの一部になっている。何年か前から。
~ 中略 ~
Git の難しさと似ている。それができれば何ができるのか、よくわかっている人には当たり前なんだけどその凄みを伝えるのは難しいと感じる。
結局何から学べばいいか
個人の所感でしかないし私が学んだ順を元にこれは良かったなと思ったものをベースにしてみたが、こんな感じだろうか。
最低限のLinuxコマンドの使い方
薄めのLinux本1冊流し読みして、辞書がわりに使える程度からでまずはいいと思う
Docker公式を最初にちゃんと読む
dockerとdocker composeの違い
最初にこれを知らなくて少し後に混乱した
ハンズオンもあるのでざっと流すと良いかも
Dockerfile、docker-compose.ymlの記述内容を確認する
Dockerfileやdocker-compose.ymlを読んだ上で開発環境を利用する
実際に自分がよく使うフレームワークを立ち上げるのに必要な環境を構築してみる、うまく立ち上がらない環境をなんとかなおしてみる
試行錯誤したり、不明点を都度GPTに聞いたりしながら対応すると理解が深まる
自分で学んだ時ためになった資料など
1. ほげさんという方の以下のzennの本がとても学びになった。
わかりやすいし、Dockerを使うために必要ないろんな知識について、分けて考えることを教えてくれる。(一気に全部片付けようとするから混乱していたのだとこれを読んでやっと気づけた)
2. ハンズオン形式でDockerとCI/CDについて学んだDaimyo Engineer Collegeの講座が良かった
残念ながらリポジトリなどに作業を残しておらず、走り書きのメモである。
ハンズオンでなんとなく触ることができたので、Docker怖くないじゃん、と思えて苦手意識が少し減ったのであった。