Chapter 01

1部: はじめに

ほげさん
ほげさん
2022.03.21に更新

この本の目的と目標

この本を開いていただきありがとうございます。

「Docker よくわからないなぁ」という感覚を「Docker わかる気がしてきた」に切り替えるにはどうしたら良いかを考えて、いくつかの目的と目標を考えてこの本を書きました。

目的 ( ゴール )

  • Docker で自由に開発環境が構築でき、よりよい開発体験を自分で生み出せる ようになる
  • この本に載っていないことも、自分で調べて応用できる対応力 をつける
  • デプロイやサービス提供にDocker がどう使われているか知り、自分で学び始められる基礎力 をつける

目標 ( そのためにやること )

  • Docker のコマンドを漠然と知るのではなく、Docker の基礎を学ぶ ことで 自分が行った操作を正しく理解する
  • 自分の操作や現在の構成 をいつでも 自力で図示 できるようになる

少し長い本になりますが、実際に日々の運用で感じたつまずきポイントをたくさんの図で説明 します。

時間を割いて読んでくれた方の「Docker よくわからない」を終わりにできる本になったのではないかと思っています。

どうしてこの本を書いたか

Docker って僕も未経験のころは漠然とわからなくて「いつか... 勉強します...」ってずっと距離をとっていましたが、やってみるとそんなに難しくなかったんです。

1年ほど前に仕事が変わる機会があったので「心機一転そろそろ使ってみるか」と思って Docker を触りましたが、ちゃんと考えれば 案外苦戦しませんでした。
そのときにこんな本を書きましたが、これだってインストールからはじめて2週間くらいで書いた覚えがあります。

https://zenn.dev/suzuki_hoge/books/2021-04-docker-picture-60fbe950136be9c7ad85

その本は「完全に初心者だった僕自身が学ぶ過程で欲しかった内容をまとめた」ものでした。
本を書く過程で僕は深い学びを得られましたが、今見返すと内容がコマンドそのものに寄りすぎていたり、試行錯誤の過程まで記してあり冗長だったりすると感じています。

当時から理解度は今とほとんど同じ程度 なのですが、今その本を見ると稚拙だなとも思い、いいねをいただくのが恥ずかしくまた「こんなわかりづらい本で...」と申し訳なくも思うようになりました。

この本ではそれらを改善し、ちゃんと考えるために必要な基礎知識と図 を整理することで、Docker そのものというよりも Docker を効率よく学ぶ方法をまとめたいと思って書きました。

この本の内容

複数のコンテナを組み合わせ、ローカル環境にメールフォームアプリケーションを構築します。

それを git clonedocker compose up のたった2コマンドで、だれでもすぐ起動できるようにします。

まずは完成品のデモをご覧ください。

デモ

起動

GitHub からアプリケーションの実装と開発環境の構成ファイルを取得し、Docker Compose で起動します。

Host Machine
$ git clone https://github.com/suzuki-hoge/docker-practice && cd docker-practice/demo
$ docker compose up --detach --build

Mail Application

上のコマンドを実行してから http://localhost:18000 を開くと、トップページが表示されます。

image

Mail Form リンクをクリックすると、メール送信フォームが開きます。

image

任意の入力をして、Send ボタンを押します。
メールサーバはモックなので実際にインターネットには送信されません、また実在しない宛先でも問題ありません。

image

( モックの ) メール送信の処理が成功したことを確認できます。

image

Mail History リンクをクリックすると、簡易的なメールの送信履歴が確認できます。

image

Mail Server

http://localhost:18025 を開くと、メールサーバのメール一覧が表示されます。

image

この ( モックの ) メールサーバの画面では、本来なら本当に送信されるはずだったメールの詳細が確認できます。

image

終了

コンテナを終了するのにも Docker Compose を使います。

Host Machine
$ docker compose down

この本で学ぶこと

このアプリケーションは次の3コンテナで構成されています。

  • 自分で PHP をインストールしたアプリケーションを動かすコンテナ
  • メール送信履歴のためのデータベースのコンテナ
  • OSS のメールサーバのコンテナ

この本では、まず コンテナイメージDockerfile についてしっかりと 基礎を学び、その後次に列挙する機能について学びます。

  • ボリューム
  • バインドマウント
  • ポート
  • ネットワーク
  • Docker Compose

これら Docker の要素をひとつひとつ分けて学ぶと、それぞれを使うのはそう難しいことではないと感じると思います。
「読めば明日からすぐに!」とはなかなか難しいですが、「Docker わからない」はかなり克服できると思います。

この本の使い方

1部

仮想化と Docker について簡単に学び、Docker の特徴や基礎知識などを身につけます。

一度軽く 目を通していただければと思います。

2部

コンテナとイメージと Dockerfile の基本を学びます。

2部は少し手を動かしながら、じっくりと読んで基礎を学ぶ という部になります。
各ページも長く読むのも大変かもしれませんが、「Docker あんまりよくわからないな」という方にこそ ぜひ読んでもらいたい です。

3部

デモで動かした3コンテナを自分で構築しながら、コンテナを特定の用途に合わせて動かすための起動オプションやコンテナの周辺機能について学びます。

3部は 2部の基礎を脚色するいろいろなコマンドを手を動かしながら学ぶ という部になります。
今すぐに全部は読まずに自分に必要なところだけを読むとか、軽く目を通していつか必要になったら読むとか、必要に合わせて活用 していただければと思います。

この本で必要になるもの

  • Docker ( インストールはまだでも大丈夫です )
  • Json を整形する jq コマンドと、ファイルツリーを表示する tree コマンド
    • 確認作業に使うので、あると便利です

この本では不要なもの

  • Docker Hub のアカウント
  • Amazon Web services や Google Cloud Platform などのアカウント
  • なんらかの有料サービスへの登録、および課金
  • 特定のエディタ

おことわり

  • Windows ( PowerShell ), Intel Mac, M1 Mac で動作を確認しています
  • この本は 基礎の理解を最重視 しています
  • コマンド集やチートシートではない ことをご理解ください
  • どうしても細かい図や表が出てきてしまうので、PC で閲覧していただければと思います