Docker on Linux 上での開発環境の構築

vscode からのリモートホストへは SSH 経由となるが、デバッグ対象のアプリケーションコンテナに接続するか、リモートホスト自体に接続するかで、構成などが大きく異なってくる。

  • 所属の異なる不特定多数のユーザーにサービスする場合は直接コンテナに接続させ、他のユーザーとの境界を明確にする(これが必要になる事業は恐らく行わない)
  • 個人または特定企業専用のホストであれば、ホストに接続した方が運用が楽
    • アプリケーション用コンテナだけでなく、DB 用コンテナ等のメンテナンスも必要なため
    • VSCode がリモートホストに SSH 接続する際、ホストのサービスポートをローカルに転送する設定を .ssh/config に書いておく.
    • LocalForward 81 localhost:81 # ローカル 81 番ポートへの接続はローカル側の転送でリモートの 81 番ポートへ転送
  • docker.host.internal ではなく host.docker.internal
  • host.docker.internal は Docker Desktop for windows/mac 用の設定なので、linux 上の docker では名前解決できない !
  • linux 上の Docker では 172.17.0.1 が常にホストのアドレスとなる.
  • はまったときは xdebug のログ出力設定を行い、デバッグセッションの接続状況を調査すると良い. xdebug.log および xdebug.log_level の設定を行い、コンテナ再起動.
  • パスマッピングの間違いがあっても、ブレイクポイントでストップしない. 今回は間違いやすいパスマッピングを不要にする設定方法を試行.
  • マウントするホストのソースディレクトリ構成と、コンテナ内部のディレクトリ構成を同じにする. これにより VSCode の launch.json 上でパスマッピングの記述が不要になる.
  • プロジェクト毎にデータベースコンテナを起動するのは大変なので、バックエンドサービスのネットワークを共有したい。
  • バックエンドサービス (mariadb) の docker-compose で作成されるネットワークをフロントエンドサービスで共有する
version: "3.3"
services:
  mariadb:
    build: ./
    volumes:
      - ../data/mariadb:/var/lib/mysql
    networks:
      - backend
    environment:
      MYSQL_ROOT_PASSWORD: "password"

networks:
  backend:
version: '3'
services:
  php74:

networks:
  default:
    external:
      name: mariadb105_backend
  • 各種ソースリポジトリは /var/repos 以下に配置し、これをそのままコンテナ内の同じパスにボリュームマウントする!
  • それぞれのプロジェクトはすべて Git 管理する.
  • いったん作成したコンテナイメージは、リビルドしても同じものが作れないことがあるため、必ず Docker レジストリに登録しておくこと!
/var/repos/
  $ME/
    containers/   # コンテナの作成・テスト用リポジトリ
      debian9-php74/
      debian10-php74/
      mariadb10.5/
    devenv/       # 開発環境用の起動設定はここで行う
      docker-compose.yml
      project_?.conf  # nginx のサイト設定ファイル等プロジェクト毎に固有の設定
      project_a.conf
      project_b.conf
      project_c.conf
      project_d.conf
  $USER1/
    $PROJECT_A/
    $PROJECT_B/
  $USER2/
    $PROJECT_C/
    $PROJECT_D/
  data/         # DB等、永続化が必要な
    mariadb/
  • devops/development/on_linux.txt
  • 最終更新: 2021/10/19 21:36
  • by admin