見出し画像

読書備忘録:開発系エンジニアのためのDocker絵とき入門

※ このブログのamazonリンクは、アフィリエイトリンクにより収入を得ています。
※ これは私個人の意見であり、会社の公式見解ではありません。

本の概要

プログラマーのためのDocker入門書。読者がDockerを使って自由に開発環境を構築できることを目標に、基本コマンドを実行したらシステムに何が起こるかを、ステップ・バイ・ステップでていねいに図解します。

https://amzn.to/3x8R1WH

この本に決めた理由

  • Dockerについて基礎の基礎から学びたく、表紙の「buildしたのにrunできない」という謳い文句に共感したため。

  • DockerとKubernetesの双方を基礎から学べる本もあったが、今回はDockerのみを勉強したかったため。

読んだ際の関連知識

  • Linuxについて、数ヶ月前に「新しいLinuxの教科書」で基礎を学んだばかり

  • 業務でDocker上で動いているコードを少し触ったことはあるが、Docker自体は一切触ったことはない

  • データ分析でコードを書いたことはあるが、アプリケーションを作成した経験はない

全体の感想

Docker初心者でも読みやすい本でした。
phpのコードが出てきて焦りましたが、解説が丁寧なのでほとんどハマらずにDockerを勉強することができよかったです。
また、難しいLinuxのコマンドが出てこず、Linux初心者でも困らずに読み進められました。

ハマったところ

第6部の「ウェブサービス開発環境の構築例」を写経する際に少しハマりました。

ハマったところ1 ~phpのコードがうまく書けなかった~

phpが初めてだったため、phpのコードで何箇所かエラーが出ました。
モグラ叩きの要領でデバックしていくだけだったため、あまり深刻ではなかったです。
私が簡単に調べたところ、公式のサンプルコードは見当たらなかったため、少し困りました。

ハマったところ2 ~docker-entrypoint-initdb.dが実行されなかった~

問題
localhost:8000を実行すると、「データベースに接続できませんでした」と出てくる。
何度更新しても、「データベースに接続できませんでした」という文言が出てくる。

解決法
こちらの記事を参考にボリュームを再起動すると、docker-entrypoint-initdb.dが実行できました。
おそらく次の事象が発生したものと思われます。
+ docker-entrypoint-initdb.dが実行されたが、何かしらのトラブルでuserテーブルが作成される前にエラーになる
+ docker-entrypoint-initdb.dは一度実行されたため、データベースがすでに存在していると認識され、docker-entrypoint-initdb.dが実行されない
+ userテーブルが作成されないため、何度更新してもエラーになる

//すべてのコンテナを停止する (コンテナが使用中の場合、volumeを削除できないため)
docker container stop app mail db

//すべてのボリュームを削除する
//(すべてのボリュームを削除する必要はないかもしれませんが、完全に初期化しました)
docker volume rm work-db-volume
docker volume rm work-mail-volume

//ボリュームを再起動する
docker volume create work-db-volume
docker volume create work-mail-volume

//コンテナを再実行する(コマンドは省略)

その他に試したこと
dockerのmysqlの公式ドキュメントを読みましたが、上手く理解できませんでした

この記事が気に入ったらサポートをしてみませんか?