皆さん、Dockerコンテナを使っていますか?
普段からDockerをよく触っている人は、この便利さを既に体感していることでしょう。しかし、たまに使う人や、これから使おうとしている人には、最初に躓くポイントが比較的多く存在し、そこでDocker使うのをやめよう、という気持ちになってしまうのではないかと私は考えています。そして、これは大変もったいないことだと思います。この本で、あなたがDockerに悩む時間を少しでも短縮できれば幸いです。
この本では、Dockerコンテナを動かすことにフォーカスします。使用頻度の高い各種サービスをDockerコンテナを用いて、簡単に起動できることを体感してもらい、Dockerコンテナを動かすことの抵抗感や心理的な障壁を軽減します。「サービスがほしい」という場面は、意外と身近なところに存在します。たとえば、開発作業でWebやデータベースのサーバーがほしいとき、リポジトリーサービスがほしいとき、あるいは、自動化サーバーなどがあるでしょう。この本では、このような場面ですぐに使える設定や構成を紹介します。基本的には、dockerコマンドを実行するよりも扱いやすいdocker-composeコマンド1を用いて、コンテナによるサービスを起動する方法を採用します。
次に、コンテナを単なる実行環境としてだけでなく、開発作業にも使ってしまう方法があるので、それを紹介します。これにはRemote Development拡張をインストールしたVisual Studio Codeを使用します。Docker Desktopとの合わせ技で、この開発方法が便利に使えます。
最後に、Dockerコンテナをサービスの提供ではなく、ビルド環境として使う例を紹介します。特にC++が関わるネイティブコードや、ゲームエンジン(Unity)などによるビルド環境をDockerイメージとして用意しておけると、ビルド環境の再構築が大変楽になります。分散や並列化など、台数を増やすのも容易になります。
この本では、Dockerコンテナを使うことに注目し、DockerコンテナやDockerに関する内容の深掘りは目的としていません。深く知りたいと感じた方は、Dockerに関する詳しい書籍は数多く存在するので、そちらを参照してください。また、この本ではわかりやすい記述を心掛けており、やや正確性を欠く表現を使用することもありますが、その点にはご了承ください。
私はまずは触って体験することが、新しい技術の習得の第一歩として重要と考えています。私自身がその過程で様々なコンテナイメージを試したいという気持ちがあり、このとき、様々なポイントで躓き、スムーズに動かないという場面に出遭いました。初めの学習過程ではもちろんのこと、開発の準備などでサービスを用意したい場面などでは、最初の支度のフェーズで手間取ることはなるべく避けたいものです。本来、簡単に起動でき、実行環境にも依存しないのがDockerコンテナの魅力のひとつなのですが、これでは台無しです。そこで、ネット上に掲載されている情報を整理して、すぐに使える状態を記載した本が必要と感じたので執筆を行いました。この本は、2022年1月に開催された技術書典12において、「手軽に使うDockerの本」という技術同人誌を底本として作成されています。
この本では、Dockerコンテナを少し触り始めたくらいの読者を想定しています。
・Dockerコマンドを実行してみたことはある方
・これからコンテナを使ってサービス構築の勉強を始めようとしている方
・コンテナ起動させようとしたけど、うまく動かず苦戦している方
他に、次のような方も想定する読者です。
・Dockerって面白い、他に動かせるサービスはないか?と探している方
・定番Dockerコンテナイメージのカタログ的なものを求めている方
基本的に、この本の内容を実行すれば実行環境がスムーズに構築できるというのを目指しています。設定ファイルを省略することを避け、ほとんどの情報を紙面で掲載するようにしています。
この本の内容は、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
この本で紹介しているコードは、一部分を除きGitHub(https://github.com/techmadot/casual-docker-book)で公開しています。紙面では、わかりにくい部分があったときに参照してください。
この本は情報の提供を目的としており、内容について注意を払って記述しておりますが、間違いなどが含まれる可能性もございます。書かれた情報(コード例を含む)を実行・適用・運用することで生じた結果に対して、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。全てにおいて自己責任で行ってください。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
この章では、Docker Desktopをインストールして環境を整えるまでを説明します。
既にインストール済みの人はインストール手順をスキップして、「2.1.4 設定の確認」に進んで下さい。
Docker Desktop for Windowsは、https://hub.docker.com/editions/community/docker-ce-desktop-windowsにアクセスして、インストーラーをダウンロードします。
ダウンロードしたインストーラー(Docker Desktop Installer.exe)を起動して、画面の指示に従ってインストールを行います(図2.2)。ここではWindows Subsystem for Linux version2(WSL2)とのインテグレーションを使用するため、必要なコンポーネントのインストールにチェックを入れておきます。
Docker Desktop for Windowsを起動したときに、図2.3の画面がでることがあります。これはWSL2の環境が整っていないことを示すので、引き続き設定を行います。
必要なWindowsコンポーネントをインストールして、WSL2環境でLinuxが動作するように整えていきます。途中でWindowsの再起動が必要になることもありますので、そのときには画面の指示に従って下さい。
まず、管理者権限でPowerShellを起動して、次のコマンドを1行で入力して実行します。
1: PS C:\> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
引き続き、次のコマンドを1行で入力して実行します。
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)。
PowerShellの画面で次のコマンドを実行し、既定のバージョンを変更します。これにより、WSL2が既定のバージョンとして選択されます。
1: PS C:\> wsl --set-default-version 2
Ubuntuのインストールを行います。管理者権限でPowerShellを起動して、次のコマンドを実行します(図2.6)。
1: PS C:\> wsl --install -d Ubuntu-20.04
インストール後、Ubuntuのウィンドウが起動して、ユーザーおよびパスワードを設定する画面が出現します(図2.7)。ここでWSL2 Ubuntu環境で使用するユーザー名を入力し、パスワードの設定を行います。
再びPowerShellの画面で次のコマンドを実行し、UbuntuがWSL2環境で実行されていることを確認します(図2.8)。
1: PS C:\> wsl -l -v
ここまでの設定が完了したらDocker Desktopを再起動します。タスクトレイから右クリックでメニューを開き、Restartを選択します。
Docker Desktopのダッシュボードを開き、設定の確認をします。ここまでの手順であれば、図2.9に示すとおり、WSL2を使用した動作および、WSL2インテグレーションの設定が有効となっています。既にインストール済みの方は、このような設定となっているかを確認し、必要に応じて前のステップで説明した準備手順を実施して下さい。
Docker Desktop for Macはhttps://hub.docker.com/editions/community/docker-ce-desktop-macにアクセスして、インストーラーをダウンロードします。このとき各自の環境に合わせて、Intelチップ版/Appleチップ版を選ぶようにします1。
ダウンロードしたファイルを開き、DockerをApplicationsの中にD&Dしてインストールを行い、初期セットアップを行います。ライセンス情報を確認して、次に進むとDocker Desktopのダッシュボード画面が出現します。
インストールが終わったら、コマンドラインから次のコマンドを実行して、正常にコンテナを起動できるかを確認しておきます。
$ docker run --rm hello-world
この実行結果にHello from Docker!という文字列が表示されていれば、正常に動作しています。もし失敗するようであれば、Docker Desktopが起動しているか、あるいは、追加でプロキシの設定が必要かなど、を確認してみてください。プロキシの設定は、SettingsのResources / PROXIESの中にあります。
Docker Desktop for Windows/Macは、少し前までは無料で使えていましたが、ライセンスの変更が実施されたため、注意が必要です。執筆時点では、無料で使い続けられるユーザーは、個人利用や小規模な企業、教育機関やオープンソースプロジェクトとなっているようです。それ以外の場合では、有料のライセンスを購入することが必要となっています。詳しくはDockerのWebページ(https://www.docker.com/legal/docker-subscription-service-agreement)を確認してください。
有料のライセンスを購入したときには、Docker Desktopの利用権だけでなく、他のサービスの利用範囲も広がります。