目次

第1章 はじめに
1.1 この本の内容
1.2 動作確認環境
1.3 サンプルコード
1.4 免責事項
1.5 表記関係について
第2章 Docker Desktopのセットアップ
2.1 Docker Desktop for Windowsのセットアップ
2.2 Docker Desktop for Macのセットアップ
2.3 動作の確認
2.4 ライセンスについて
第3章 WSL2環境にDockerをセットアップ
3.1 Docker CEのセットアップ
3.2 動作の確認
第4章 Windowsコンテナのセットアップ
4.1 Docker Desktopを利用している場合
4.2 Docker Desktopを利用していない場合
第5章 Docker Composeの説明
5.1 Composeファイル(docker-compose.yml)
5.2 各種コマンド
5.3 ライフサイクル
第6章 サービスを提供するコンテナの紹介
6.1 ファイアウォールの設定
6.2 Webサーバー : nginx
6.3 データベースサーバー : MySQL
6.4 コンテンツ管理システム : WordPress
6.5 プロジェクト管理ソフトウェア (Redmine)
6.6 ローカルのAmazon S3環境 : MinIO
6.7 リポジトリー管理システム : Gitea
6.8 CI/CD支援サーバー : Jenkins
6.9 ElasticsearchとKibana
6.10 PrometheusとGrafana
第7章 開発環境としてのコンテナ
7.1 Visual Studio Codeによるコンテナ内開発
7.2 Python Flaskを使った開発環境
7.3 Spring Bootを使った開発環境
7.4 Vue.jsを使った開発環境
7.5 Reactを使った開発環境
第8章 ビルド環境としてのコンテナ
8.1 MSBuild実行コンテナ
8.2 Unityによるアプリのビルドコンテナ
第9章 コンテナの中からDocker
9.1 Docker in Docker (DinD)
9.2 Docker out of Docker (DooD)
付録A Redmineプラグイン入門
A.1 プラグインの生成
A.2 モデルの生成
A.3 データベースへの操作
A.4 コントローラー・ビューの生成
A.5 ルーティングの追加
A.6 メニューへの追加
A.7 動作チェック
付録B macOS "を" コンテナで動かす
B.1 検証環境の準備
B.2 macOS用のコンテナを起動
B.3 コンテナ内のmacOSをセットアップ・起動
付録C Rancher Desktopの検証
C.1 Windowsへインストール
C.2 mac(Intel)へインストール
C.3 動作検証
あとがき
謝辞

第1章 はじめに

 皆さん、Dockerコンテナを使っていますか?


 普段からDockerをよく触っている人は、この便利さを既に体感していることでしょう。しかし、たまに使う人や、これから使おうとしている人には、最初に躓くポイントが比較的多く存在し、そこでDocker使うのをやめよう、という気持ちになってしまうのではないかと私は考えています。そして、これは大変もったいないことだと思います。この本で、あなたがDockerに悩む時間を少しでも短縮できれば幸いです。

1.1 この本の内容

 この本では、Dockerコンテナを動かすことにフォーカスします。使用頻度の高い各種サービスをDockerコンテナを用いて、簡単に起動できることを体感してもらい、Dockerコンテナを動かすことの抵抗感や心理的な障壁を軽減します。「サービスがほしい」という場面は、意外と身近なところに存在します。たとえば、開発作業でWebやデータベースのサーバーがほしいとき、リポジトリーサービスがほしいとき、あるいは、自動化サーバーなどがあるでしょう。この本では、このような場面ですぐに使える設定や構成を紹介します。基本的には、dockerコマンドを実行するよりも扱いやすいdocker-composeコマンド1を用いて、コンテナによるサービスを起動する方法を採用します。

 次に、コンテナを単なる実行環境としてだけでなく、開発作業にも使ってしまう方法があるので、それを紹介します。これにはRemote Development拡張をインストールしたVisual Studio Codeを使用します。Docker Desktopとの合わせ技で、この開発方法が便利に使えます。

 最後に、Dockerコンテナをサービスの提供ではなく、ビルド環境として使う例を紹介します。特にC++が関わるネイティブコードや、ゲームエンジン(Unity)などによるビルド環境をDockerイメージとして用意しておけると、ビルド環境の再構築が大変楽になります。分散や並列化など、台数を増やすのも容易になります。

 この本では、Dockerコンテナを使うことに注目し、DockerコンテナやDockerに関する内容の深掘りは目的としていません。深く知りたいと感じた方は、Dockerに関する詳しい書籍は数多く存在するので、そちらを参照してください。また、この本ではわかりやすい記述を心掛けており、やや正確性を欠く表現を使用することもありますが、その点にはご了承ください。

1.1.1 この本が生まれた背景

 私はまずは触って体験することが、新しい技術の習得の第一歩として重要と考えています。私自身がその過程で様々なコンテナイメージを試したいという気持ちがあり、このとき、様々なポイントで躓き、スムーズに動かないという場面に出遭いました。初めの学習過程ではもちろんのこと、開発の準備などでサービスを用意したい場面などでは、最初の支度のフェーズで手間取ることはなるべく避けたいものです。本来、簡単に起動でき、実行環境にも依存しないのがDockerコンテナの魅力のひとつなのですが、これでは台無しです。そこで、ネット上に掲載されている情報を整理して、すぐに使える状態を記載した本が必要と感じたので執筆を行いました。この本は、2022年1月に開催された技術書典12において、「手軽に使うDockerの本」という技術同人誌を底本として作成されています。

1.1.2 想定読者

 この本では、Dockerコンテナを少し触り始めたくらいの読者を想定しています。

 ・Dockerコマンドを実行してみたことはある方

 ・これからコンテナを使ってサービス構築の勉強を始めようとしている方

 ・コンテナ起動させようとしたけど、うまく動かず苦戦している方

 他に、次のような方も想定する読者です。

 ・Dockerって面白い、他に動かせるサービスはないか?と探している方

 ・定番Dockerコンテナイメージのカタログ的なものを求めている方

 基本的に、この本の内容を実行すれば実行環境がスムーズに構築できるというのを目指しています。設定ファイルを省略することを避け、ほとんどの情報を紙面で掲載するようにしています。

1.2 動作確認環境

 この本の内容は、Windows10の環境とIntel Macの環境で確認しています。全ての内容を試すには、Windows10の環境が必要です。一部の内容はMacの環境でうまく動作しません。CPUの持つ仮想化支援機能は、全て有効化した状態で動かしています。

 検証で使用していた機材の環境は、次の通りです。

 ・Windows10 (21H2) Pro

  ─Docker Desktop for Windows (4.3)

  ─Visual Studio Code (1.63.2)

  ─メモリー 32GB

  ─VMware Workstation 16 Pro (Appendixの内容を試す場合)

 ・Intel Mac の Big Sur (11.4)

  ─Docker Desktop for Mac

  ─Visual Studio Code (1.63.2)

  ─メモリー 8GB

1.3 サンプルコード

 この本で紹介しているコードは、一部分を除きGitHub(https://github.com/techmadot/casual-docker-book)で公開しています。紙面では、わかりにくい部分があったときに参照してください。

1.4 免責事項

 この本は情報の提供を目的としており、内容について注意を払って記述しておりますが、間違いなどが含まれる可能性もございます。書かれた情報(コード例を含む)を実行・適用・運用することで生じた結果に対して、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。全てにおいて自己責任で行ってください。

1.5 表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

1. 最近のDocker Desktopインストール時にはdocker composeコマンドが使えるのですが、昔から使えるdocker-composeコマンドを本書では使用します。

第2章 Docker Desktopのセットアップ

 この章では、Docker Desktopをインストールして環境を整えるまでを説明します。

2.1 Docker Desktop for Windowsのセットアップ

 既にインストール済みの人はインストール手順をスキップして、「2.1.4 設定の確認」に進んで下さい。

2.1.1 ダウンロードとインストール

 Docker Desktop for Windowsは、https://hub.docker.com/editions/community/docker-ce-desktop-windowsにアクセスして、インストーラーをダウンロードします。

図2.1: Docker Desktop for Windowsのダウンロード

 ダウンロードしたインストーラー(Docker Desktop Installer.exe)を起動して、画面の指示に従ってインストールを行います(図2.2)。ここではWindows Subsystem for Linux version2(WSL2)とのインテグレーションを使用するため、必要なコンポーネントのインストールにチェックを入れておきます。

図2.2: Docker Desktop for Windowsインストール設定

 Docker Desktop for Windowsを起動したときに、図2.3の画面がでることがあります。これはWSL2の環境が整っていないことを示すので、引き続き設定を行います。

図2.3: WSL2 installation is incomplete

2.1.2 WSL2のセットアップ

 必要なWindowsコンポーネントをインストールして、WSL2環境でLinuxが動作するように整えていきます。途中でWindowsの再起動が必要になることもありますので、そのときには画面の指示に従って下さい。

 まず、管理者権限でPowerShellを起動して、次のコマンドを1行で入力して実行します。

リスト2.1: WSLを有効化する

 1: PS C:\> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

 引き続き、次のコマンドを1行で入力して実行します。

リスト2.2: 仮想マシンの機能を有効化する

 1: PS C:\> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 ブラウザーでhttps://aka.ms/wsl2kernelにアクセスして、「x64マシン用WSL2 Linuxカーネル更新プログラム パッケージ」を取得します。執筆時点では、wsl_update_x64.msiというファイル名で取得できるので、これを実行してインストールします(図2.5)。

図2.4: WSL2 Linuxカーネル更新プログラムをダウンロード
図2.5: WSL2 Linuxカーネル更新プログラムをインストール

 PowerShellの画面で次のコマンドを実行し、既定のバージョンを変更します。これにより、WSL2が既定のバージョンとして選択されます。

リスト2.3: WSLで使用する既定のバージョンをセット

 1: PS C:\> wsl --set-default-version 2

2.1.3 Ubuntuのインストール

 Ubuntuのインストールを行います。管理者権限でPowerShellを起動して、次のコマンドを実行します(図2.6)。

リスト2.4: Ubuntuのインストール(管理者PowerShell)

 1: PS C:\> wsl --install -d Ubuntu-20.04
図2.6: Ubuntuのインストール

 インストール後、Ubuntuのウィンドウが起動して、ユーザーおよびパスワードを設定する画面が出現します(図2.7)。ここでWSL2 Ubuntu環境で使用するユーザー名を入力し、パスワードの設定を行います。

図2.7: Ubuntu on WSL2

 再びPowerShellの画面で次のコマンドを実行し、UbuntuがWSL2環境で実行されていることを確認します(図2.8)。

リスト2.5: ディストリビューションとバージョンの確認

 1: PS C:\> wsl -l -v
図2.8: デフォルトのディストリビューションおよびバージョンの確認

 ここまでの設定が完了したらDocker Desktopを再起動します。タスクトレイから右クリックでメニューを開き、Restartを選択します。

2.1.4 設定の確認

 Docker Desktopのダッシュボードを開き、設定の確認をします。ここまでの手順であれば、図2.9に示すとおり、WSL2を使用した動作および、WSL2インテグレーションの設定が有効となっています。既にインストール済みの方は、このような設定となっているかを確認し、必要に応じて前のステップで説明した準備手順を実施して下さい。

図2.9: 設定の確認

2.2 Docker Desktop for Macのセットアップ

 Docker Desktop for Macはhttps://hub.docker.com/editions/community/docker-ce-desktop-macにアクセスして、インストーラーをダウンロードします。このとき各自の環境に合わせて、Intelチップ版/Appleチップ版を選ぶようにします1

図2.10: Docker Desktop for Macのダウンロード

 ダウンロードしたファイルを開き、DockerをApplicationsの中にD&Dしてインストールを行い、初期セットアップを行います。ライセンス情報を確認して、次に進むとDocker Desktopのダッシュボード画面が出現します。

図2.11: macにDocker Desktopをインストール

2.3 動作の確認

 インストールが終わったら、コマンドラインから次のコマンドを実行して、正常にコンテナを起動できるかを確認しておきます。

コンテナでHello,world

$ docker run --rm hello-world

 この実行結果にHello from Docker!という文字列が表示されていれば、正常に動作しています。もし失敗するようであれば、Docker Desktopが起動しているか、あるいは、追加でプロキシの設定が必要かなど、を確認してみてください。プロキシの設定は、SettingsのResources / PROXIESの中にあります。

2.4 ライセンスについて

 Docker Desktop for Windows/Macは、少し前までは無料で使えていましたが、ライセンスの変更が実施されたため、注意が必要です。執筆時点では、無料で使い続けられるユーザーは、個人利用や小規模な企業、教育機関やオープンソースプロジェクトとなっているようです。それ以外の場合では、有料のライセンスを購入することが必要となっています。詳しくはDockerのWebページ(https://www.docker.com/legal/docker-subscription-service-agreement)を確認してください。

 有料のライセンスを購入したときには、Docker Desktopの利用権だけでなく、他のサービスの利用範囲も広がります。

図2.12: 執筆時点での月額価格

1. 筆者の環境ではIntel Macで動かしています。

試し読みはここまでです。
この続きは、製品版でお楽しみください。