初学者から見たDockerのわからないポイント
Zennにある「実践 Docker - ソフトウェアエンジニアの『Docker よくわからない』を終わりにする本」を参考に進めてみました。
Chapter12までは問題なく進められたもののChapter13が何度試してもエラーが出ました。確認のためにgit cloneしたあとコードをコピペしたんですが全く同じエラーが出たので、おそらく記事に間違いがあるのか私の理解力が低いのかなと断念しました。ここから先が知りたかったので残念です。
Dockerの難しさ
Linuxの勉強不足だと思うのですがDocker初学者が一番難しいと感じるのはdocker composeやDockerfileの部分だと思います。例えば上記の本でも出てくるのですが
FROM ubuntu:20.04
RUN apt update && \
apt install -y software-properties-common && \
LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php && \
apt update && \
apt install -y php8.0 php8.0-mysql
COPY ./docker/app/mail.ini /etc/php/8.0/cli/conf.d/mail.ini
RUN apt install -yqq msmtp msmtp-mta
COPY ./docker/app/mailrc /etc/msmtprc
RUN apt install -y curl iputils-ping procps vim tree
- この行が何をしているのか
- なぜ、こう書くのか
この部分を解説している方が少ないので結局、初学者はわからないまま手打ちやコピペで通り過ぎます。しかし、自分で書こうと思った際に応用がきかないのでWebを歩き回り古い情報も混じったコードやなんちゃってエンジニアのアフィリエイトブログのコピペコードを参考にするしかなく途方に暮れるというのが現実です。
この本を書いた方を批判しているわけではないです。ただDockerを理解している方にとって初学者の気持ちはわからないんだろうなと感じました。上記部分が一番理解したいところなのですが特に情報が少ない部分でもあるんですよね。
そして、エラーに遭遇したときに解説されていない部分が関係しているのか、していないのかが判別できません。 もちろんこれは本人の勉強不足なので、書籍等を利用して勉強していこうと思います。Dockerでの環境構築が思うようにできないのは辛いところです。
docker composeとDockerfileに特化していて、いろいろなパターンの環境をハンズオンで構築しながら「この行が何をしているのか」「なぜ、こう書くのか」を掘り下げてくれる書籍が出たら初学者にとってはこれ以上ないほど嬉しい内容になると思うのですが、なかなか見当たらないのが残念です。もし理解が深まったらZennで書いてみたいです。
Discussion
こんにちは。たまたま目に止まったので答えますね。
エラーについて
とのことなので、自分が使っているDebian GNU/Linux上でgit cloneしてビルドしました。自分の環境では問題なくビルドできたのでバグではないですね。
では、JavaCurryさんが悪いのかといえば、そうではありません。安心してください。この本を書かれた筆者の方は、Linuxをあまり理解されていないようで書き方が不親切なことが原因です。
イメージのビルドコマンドをこのように記述しています。
この記述では、workディレクトリで実行しなければDockerfileを読み込めないのでビルドできません。また、Markdownで記述しているにもかかわらず先頭に$を付けているせいで、コピペしても$が邪魔で実行できません。(ちなみに$を付ける記述は昔、シェルの操作でrootとユーザーの区別のために付けていました。しかし、コピペ前提のMarkdownではノイズになるのでMarkdownlintではエラーになります)そして、複数行に分けているのも謎ですし、最後のピリオドも説明したらいいのにと思いました。
書籍の前提条件に「LinuxとLinuxのコマンドライン操作に慣れている人」と書いてあるなら別ですが見た感じではそういう記述もないですし、逆にLinuxを知っている人には冗長な説明が続いていたりするので微妙だと思いました。
Dockerについて
Dockerについて学びたいとのことですが、DockerはDockerというものではなくLinuxです。まずはLinuxの使い方と構造を学ばれてはいかがでしょうか。例にあげていたDockerfileですが、実はLinux操作コマンドそのままで解説を書くとこうなります。
上の意味もDebian系Linuxディストリビューションを使っていれば、aptはシステムのアップデートやパッケージのインストールに使うので、すぐに想像できますが使ったこともなければ意味もわからないと思います。
ですので、本気で知りたいと思うのなら実機(x86系マシン)にLinuxをインストールして使うところから始めるのはいかがでしょうか。個人的な意見ですが、仮想マシンやWSL、Raspberry Piを使ったLinuxの学習は使わなくなって忘れたり、アーキテクチャの違いでつまづくのでお勧めしません。
長文になりましたが参考になれば幸いです。
元々興味があったのでLinuxの勉強も併行して進めてみます。詳しい解説までしていただきありがとうございました!
いえいえ、頑張ってください!