関連サイト
本書の関連ページが用意されています。
内容紹介
コンテナ型の仮想環境を作成、実行するためのプラットフォーム、Dockerの実践解説書。
本書は、エンジニアが普段行うようなWebアプリケーション開発環境の構築を、Dockerを用いて行うにはどのようにすればよいか、またその環境をDockerで作ることによってどのように開発を効率化させることができるか、にフォーカスした内容となっています。
PHPのLaravel、Node.jsのNuxt.js、RubyのSinatraとRuby on Rails、PythonのPyTorchといった、Webアプリケーションや機械学習の領域で用いられているものを対象として取り上げました。それぞれの解説は独立したものとなっているので、読者の方が使っている言語はもちろん、経験していない言語やフレームワークを試すのにも良いでしょう。
本書の構成は次のようになっています。
Chapter1「Dockerの基本」では、DockerやDocker Composeについて簡単に解説し、Docker環境のインストール手順を解説します。最後に、Dockerで使える機能を一望できるよう、Docker CLIやDocker Composeで使えるコマンドを一覧にまとめました。
Chapter2「実行環境としてのDockerイメージを構築する」では、Webアプリケーションの開発作業を想定し、Dockerでアプリケーションの実行環境を構築する手順について解説します。対象の言語環境はPHPのLaravel、Node.jsのNuxt.js、RubyのSinatraです。イメージ構築にあたってのポイントは、各々の環境で必要になるパッケージ(ライブラリ)のインストール手順です。
Chapter3「開発作業に適したDocker環境を構築する」では、Ruby on Rails(Rails)の環境を構築します。Railsは単体でも動作しますが、開発するにあたっては、データベースサーバーだけでなく、Springサーバーなどの常駐プロセスを動かす必要も出てきます。フロントエンドの開発スタイルによっては、さらにWebpackやVue.jsといったNode.jsの環境も必要になってきます。RubyとNode.jsの環境ではベースイメージが異なります。双方の言語を用意したイメージをビルドすることで、使い勝手の良い開発環境を作ることができます。
Chapter4「第三者が配布しているDocker環境をカスタマイズする」では、、第三者が配布している既存のDocker環境をカスタマイズする例として、ディープラーニングの環境をNVIDIA Dockerで動かす手順を解説します。Jupyter Notebookの開発元がJupyterアプリケーションの実行環境をDockerイメージとして配布しているので、その環境でJupyterLabを動かし、PyTorchを使えるようにし、最後にNVIDIA DockerでGPUを使った学習処理を評価してみます。
Chapter5「Dockerの機能を使いこなす」では、Dockerが提供している機能に対して、もう少し踏み込んだトピックを紹介します。イメージとレイヤー、エントリーポイント、ボリュームとネットワークなどの話題を解説しています。
書誌情報
- 著者: 櫻井 洋一郎, 村崎 大輔
- 発行日: 2019-07-25 (紙書籍版発行日: 2019-07-25)
- 最終更新日: 2019-07-25
- バージョン: 1.0.0
- ページ数: 336ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: マイナビ出版
対象読者
著者について
櫻井 洋一郎
Retty株式会社 エンジニア。東京大学大学院 情報理工学系研究科 創造情報学専攻2007年卒。NECの開発部門に7年間勤務。仕事の傍ら個人でサービスを開発し、過去に多数のWebサービス、アプリを開発。その後Retty株式会社の創業期にJoinし2度のiOSアプリリニューアルを遂行。iOS開発以外にもサーバサイド開発、DockerとKubernetesを使った社内開発環境の構築など幅広い業務を行う。また業務の傍らtry! Swift Tokyoでオーガナイザを務めるなどコミュニティ活動も行っている。
村崎 大輔
2016年よりフリーランスエンジニア。博士(情報理工学)。Web系のスタートアップ企業を中心に開発支援とコンサルティングを手がける。情報工学の見識と高い適応力が強み。「新技術は食わず嫌いしない」がモットー。
目次
Chapter01 Dockerとは
- 1-1 本書の目的
- 1-1-1 本書で想定しているユーザー
- 1-2 Dockerとは
- 1-2-1 コンテナ型の仮想化
- 1-2-2 イメージを用いたimmutable infrastructure
- 1-2-3 Dockerと関連したサービスやアプリケーション
- 1-3 Kubernetesとは
- 1-3-1 オーケストレーション
- 1-3-2 Kubernetesを使うメリット
- 1-4 Dockerイメージをビルドしてみよう
- 1-4-1 イメージのビルドで得られるメリット
- 1-4-2 現場で想定される課題
- 1-5 2章以降を読み進めるにあたって
- 1-5-1 想定しているPC環境
- 1-5-2 周辺知識について
Chapter02 Dockerの基本的な使い方
- 2-1 Dockerのインストール
- 2-1-1 Dockerのインストール(Linux)
- 2-1-2 Dockerのインストール(Windows)
- 2-1-3 Dockerのインストール(Mac)
- 2-2 Dockerの基本的なコマンド
- 2-2-1 Dockerのコマンド一覧とその意味
- 2-2-2 Dockerコマンドのシーンごとの利用例
- 2-3 DockerfileでオリジナルのDockerイメージを作成する
- 2-3-1 Dockerfileとは
- 2-3-2 Dockerfileで使えるコマンド
- 2-3-3 Dockerfileで使えるコマンドの詳細
- 2-3-4 Dockerfileからイメージを作成する
- 2-3-5 Dockerイメージのレイヤーとキャッシュについて
- 2-4 作成したDockerイメージをレジストリで共有する
- 2-4-1 Docker Hub
- 2-5 Docker Composeで複数コンテナをまとめて管理する
- 2-5-1 docker-composeとは
- 2-5-2 docker-composeのインストール
- 2-5-3 docker-composeコマンド一覧とその意味
- 2-5-4 docker-composeでWordPress環境を構築する
Chapter03 オンプレの構成をコピーしたDocker環境を作成する
- 3-1 サーバーの環境一式を全部入りコンテナに移行する
- 3-1-1 コンテナで複数のプロセスを動かす場合の注意
- 3-1-2 Baseimage-dockerについて
- 3-2 Baseimage-dockerを使ってみる
- 3-2-1 イメージをpullする
- 3-2-2 コンテナを実行する
- 3-2-3 コンテナ内部で動作しているサービスを制御する
- 3-2-4 コンテナ内部で新しいサービスを動かしてみる
- 3-3 Dockerイメージを構築する
- 3-3-1 イメージのビルドに必要なリソースやスクリプトを用意する
- 3-3-2 必要なパッケージがインストールされるようにする(プロビジョニング)
- 3-3-3 インストールしたサービスの動作確認
- 3-3-4 必要なサービスが自動で立ち上がるようにする
- 3-3-5 アプリケーションがデプロイされた状態にする
- 3-3-6 データベースと設定ファイルを用意する
- 3-3-7 コンテナへSSHログインできるようにする
Chapter04 本番環境からローカルのDocker環境にポーティングする
- 4-1 AWSを利用したサービスをローカル環境上にDockerで構築する
- 4-1-1 機能要件およびデータ構造、システム要件、構成図
- 4-1-2 AWSアカウントを新規作成する
- 4-1-3 Webアプリケーションサーバーの作成
- 4-1-4 データベースサーバーの作成
- 4-1-5 セキュリティグループの設定
- 4-1-6 キャッシュサーバーの作成
- 4-1-7 ファイルストレージの作成
- 4-1-8 アプリケーションコードの作成
- 4-2 クラウドに構築した環境をローカルの開発環境にポーティングする
- 4-2-1 Dockerによるデータベースサーバーの構築
- 4-2-2 Dockerによるキャッシュサーバーの構築
- 4-2-3 Dockerによるファイルサーバーの構築
- 4-2-4 Dockerによるアプリケーションサーバーの構築
Chapter05 ローカルのDocker環境を本番環境にデプロイする
- 5-1 Kubernetesとは
- 5-2 Kubernetesの概念
- 5-2-1 Pod
- 5-2-2 Deployment
- 5-2-3 Service
- 5-2-4 Volume
- 5-2-5 ConfigMap
- 5-2-6 Secret
- 5-2-7 Ingress
- 5-2-8 Namespace
- 5-3 minikubeで始めるKubernetes
- 5-3-1 minikubeのインストールとQuick Start
- 5-3-2 minikubeで4章で作成した環境をローカルに作成
- 5-4 Google Cloud Platform(GCP)を使う
- 5-4-1 GCPとは?
- 5-4-2 Googleアカウントの作成とGCPアカウントの作成
- 5-4-3 Google Container Engine(GKE)の環境を作ろう
- 5-5 GCP上に4章で作ったアプリケーションをデプロイしよう
- 5-5-1 Single Node File Serverの環境を作成する
- 5-5-2 GKEのKubernetesにアプリケーションをデプロイする
Chapter06 Appendix
- 6-1 ログ機能
- 6-1-1 volumeマウント機能で外部ストレージに保存する
- 6-1-2 外部サービスにログを送信する
- 6-2 複数コンテナがある場合のkubectl execについて
- 6-3 Dockerfileのデバッグ方法
- 6-4 継続的インテグレーションサービスによるイメージの自動ビルド
- 6-4-1 CircleCI
- 6-5 Docker in Docker
- 6-6 Dockerホストの容量が少なくなってきたとき
- 6-6-1 TAGがnoneのものを全て削除
- 6-6-2 リンク切れボリュームの一括削除
- 6-6-3 終了済みコンテナの一括削除
- 6-7 プロキシの設定について
- 6-7-1 Dockerデーモン側の設定
- 6-7-2 コンテナ環境のプロキシ設定