Dockerを使用したDrogon開発環境の構築:Windows 10、Linux、Mac対応

2023年10月13日14:52:26

本環境:Windows 10 Pro 22H2、カーネルバージョン19045.2965

Windows、Linux、Macに直接開発環境を構築するのは少し複雑です。以前はDrogon公式イメージが提供されていなかったため、Dockerイメージの登場は非常に便利になりました。最近になってようやく対応が開始されました。

Docker Desktopのインストール

Windowsの仮想化には2つの選択肢があります:Hyper-VとWSLです。

WSL2の要件

  • WSLバージョン 1.1.3.0以上
  • Windows 11 64ビット:HomeまたはPro 21H2以上、EnterpriseまたはEducation 21H2以上
  • Windows 10 64ビット:HomeまたはPro 21H2(ビルド19045)以上、EnterpriseまたはEducation 21H2(ビルド19045)以上

WindowsでWSL 2機能を有効にします。詳細な手順についてはMicrosoftのドキュメントを参照してください。

WSL 2をWindows 10またはWindows 11で実行するには、以下のハードウェア要件を満たす必要があります:

  • 64ビットプロセッサ(SLAT対応)
  • 4GB以上のシステムメモリ
  • BIOS設定で仮想化が有効になっていること

Windowsコンテナを実行するには、Windows 10またはWindows 11 ProまたはEnterprise版が必要です。Home版またはEducation版ではLinuxコンテナのみを実行できます。

Hyper-VとWindowsコンテナの要件

  • Windows 11 64ビット:Pro 21H2以上、EnterpriseまたはEducation 21H2以上
  • Windows 10 64ビット:Pro 21H2(ビルド19045)以上、EnterpriseまたはEducation 21H2(ビルド19045)以上

Windows 10とWindows 11 Home版の場合、システム要件はWSL 2バックエンドオプションタブを参照してください。

Hyper-VとコンテナのWindows機能を有効にする必要があります。

Windows 10でHyper-Vクライアントを正常に実行するには、以下のハードウェア要件を満たす必要があります:

  • 64ビットプロセッサ(SLAT対応)
  • 4GB以上のシステムメモリ
  • BIOS設定で仮想化が有効になっていること

公式ドキュメント:https://docs.docker.com/desktop/install/windows-install/

公式はWSL2を推奨していますが、インストールは少し複雑です。Hyper-Vのインストールは簡単で、コントロールパネルの「プログラムと機能」→「Windows機能の有効化または無効化」からHyper-Vにチェックを入れるだけです。

WSL2のインストール手順

  1. WSL2の要件を確認:Win+Rで「実行」を開き、「winver」と入力してWindowsのバージョンを確認
  2. Linux用Windowsサブシステムを有効にする:管理者権限でPowerShellを開き、以下のコマンドを実行
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  3. 仮想化を有効にする:管理者権限でPowerShellを開き、以下のコマンドを実行
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

**コンピュータを再起動してからWSL2カーネルパッケージをインストールすることをお勧めします**

  1. X64版のWSL2 Linuxカーネルアップデートパッケージをダウンロードしてインストール

    ダウンロード先:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

    公式サイト:https://learn.microsoft.com/ja-jp/windows/wsl/install-manual

  2. WSLのデフォルトバージョンを設定
    wsl --set-default-version 2

Docker Desktopのダウンロードとインストール

ダウンロード先:https://docs.docker.com/desktop/install/windows-install/

「Docker Desktop for Windows」をダウンロードします。

インストール後、WSL2をインストールした場合、Docker Desktopの設定で「Use the WSL 2 based engine」がチェックされていることを確認してください。Hyper-Vをインストールした場合はチェックされていません。

参考:

インストールが成功したか確認:

wsl -l -v

これ以降はWindows、Linux、Macで基本的なコマンドは同じです。

Dockerミラーサーバーの設定

公式アドレスがアクセスできない場合、ミラーサーバーを使用します:

{
 "registry-mirrors":[
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
   ],
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false
}

Dockerイメージ:https://hub.docker.com/r/drogonframework/drogon/tags

**注意:マウントしたディレクトリは随意に削除または変更しないでください**

Drogonイメージのプルと実行

イメージのプル

docker pull drogonframework/drogon:latest

イメージの実行

Linux環境での例:

docker run -p 8778:8777 -v /data/code/drogon:/data/drogon -it drogonframework/drogon /bin/bash

/data/code/drogonはホストマシンのディレクトリ、/data/drogonはコンテナ内のディレクトリ、8777はdrogonのデフォルトポートです。

Windows環境での例:

docker run -p 8778:8777 -v D:/docker/code:/data -it drogonframework/drogon /bin/bash

bashに入ると、drogonのツールディレクトリになります。

root@9e7cf269f153:/install/drogon# ls
build         CMakeLists.txt       config.example.yaml  drogon.jpg  LICENSE      README.md        third_party
build.sh      cmake_modules        CONTRIBUTING.md      examples    nosql_lib    README.zh-CN.md  trantor
ChangeLog.md  conanfile.txt        docker               format.sh   orm_lib      package.xml      test.sh

バージョン情報の確認:

root@9e7cf269f153:/install/drogon# drogon_ctl -v
     _
  __| |_ __ ___   __ _  ___  _ __
 / _` | '__/ _ \ / _` |/ _ \| '_ \
| (_| | | | (_) | (_| | (_) | | | |
 \__,_|_|  \___/ \__, |\___/|_| |_|
                 |___/

A utility for drogon
Version: 1.9.0-rc.1
Git commit: 94ca651cbdbdf4038bc0392bcf2d897661996f7c
Compilation:
  Compiler: g++-11
  Compiler ID: GNU
  Compilation flags: -O3 -DNDEBUG -std=c++17 -I/usr/include/jsoncpp -I/usr/local/include
Libraries:
  postgresql: yes  (pipeline mode: yes)
  mariadb: yes
  sqlite3: yes
  ssl/tls backend: OpenSSL
  brotli: no
  hiredis: yes
  c-ares: yes
  yaml-cpp: no

新規プロジェクトの作成

/data/ディレクトリに移動し、新しいプロジェクトを作成します(マウントポイントは/dataです):

root@9e7cf269f153:/data# pwd
/data
root@9e7cf269f153:/data# ls
web
root@9e7cf269f153:/data# drogon_ctl create project mydrogonapp
create a project named mydrogonapp

プロジェクトディレクトリに移動してビルド:

cd /data/mydrogonapp/build/
cmake ..
make
./drogon

注意:デフォルトのプロジェクトには何も機能がありません。正常に実行できれば、プロジェクトの実行フローは問題ありません。サービスにアクセスする場合は、http://127.0.0.1:8787/ を使用します(Dockerのマッピングポートはデフォルトで8787です)。

基本的な説明

  1. 実行環境はDockerコンテナ内にあり、コードディレクトリをマウントしてコンテナ内で実行します。
  2. Windows上で直接開発することをお勧めします。Linux内で実行すると、より複雑になります。リモートSSHを使用することをお勧めします。

VSCodeでDockerコンテナに接続

なぜVSCodeでDockerコンテナに接続する必要があるのかというと、Windowsでマウントしたディレクトリのコードを直接開いても、コードの補完や追跡機能が利用できないためです。CMakeはコンテナ内のルールを自動的に実行しません。

まず、VSCodeの不要なプラグインをすべて削除することをお勧めします。一部のプラグインは競合を引き起こす可能性があり、自動的にアンインストールされることがあります。

基本的には以下の2つのプラグインをインストールするだけで十分です:

  1. Dev Containers https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers
  2. C/C++ Extension Pack https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools-extension-pack

これらは基本的なプラグインで、Dev ContainersはローカルのDockerコンテナに接続し、C/C++ Extension PackはC++の構文とコード補完、CMakeツールを提供します。

Remote Developmentプラグインは4つのプラグインを含んでいます:

  • Remote - SSH - SSHを使用してリモートコンピュータ/VM上のフォルダを開き、どこからでもソースコードを使用できます。x86_64、ARMv7l(AArch32)、ARMv8l(AArch64)ベースのLinux、Windows 10/Server(1803+)、macOS 10.14+(Mojave)SSHホストをサポートします。
  • Remote - Tunnels - VS Codeトンネル(SSHではなく)を使用してリモートコンピュータ/VM上のフォルダを開き、どこからでもソースコードを使用できます。
  • Dev Containers - マウントされたフォルダまたはコンテナ内のフォルダを開き、個別のツールチェーンまたはコンテナベースのアプリケーションを使用します。
  • WSL - Linux用Windowsサブシステム内のフォルダを開き、快適なWindows環境からLinuxベースの開発体験を得ます。

これにより、Dockerで実行中のコンテナが自動的に表示されます。注意点として、コンテナの「X」ボタンをクリックしないでください。そうするとコンテナが直接削除されてしまいます。

矢印アイコン(→)をクリックしてコンテナにアクセスします。

プロジェクトディレクトリ(マウントしたコードディレクトリ)を開きます。

CMakeプラグインのビルドツールを選択します。

2番目のオプションを選択することをお勧めします。なぜなら、私たちのdrogonプロジェクトはCMakeベースであり、CMakeが処理を担当するためです。これにより、正式な開発を開始できます。

タグ: Docker drogon WSL2 Hyper-V CMake

6月7日 22:55 投稿