takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

Docker で Amon2 の開発環境を構築 (2024年7月版)

はじめに

以前 Docker で Amon2 の開発環境構築の記事を書きましたが、当時と比較して構成が変わってきたので改めて記事にまとめました

takaya030.hatenablog.com

検証環境

Windows11 Home Edition (version 23H2)

D:\>wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
MSRDC バージョン: 1.2.5326
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26091.1-240325-1447.ge-release
Windows バージョン: 10.0.22631.3880

# installed ubuntu version
Ubuntu 22.04.4 LTS (Jammy Jellyfish)

# docker
Docker version 25.0.3, build 4debf41
Docker Compose version v2.24.6

ディレクトリ構成

amon2
├── .dockerignore
├── Dockerfile
├── compose.build.yml
├── compose.yml
└── cpanfile

各種設定ファイル

amon2/.dockerignore

.git
Dockerfile
compose.yml
compose.build.yml
local

amon2/Dockerfile

マルチステージビルドでイメージを作成します
base では Carton のインストールとワークディレクトリの作成
devapp ではイメージへのモジュールのインストールとローカルで編集したソースのイメージへの書き込みを行っています

FROM perl:5.40 AS base

WORKDIR /tmp

# install Carton
RUN cpanm Carton

# create appuser
RUN useradd -d /home/appuser -m -s /bin/bash -u 1000 appuser
USER 1000
RUN mkdir /home/appuser/app
WORKDIR /home/appuser/app

FROM base AS devapp

USER 1000
COPY cpanfile cpanfile.snapshot /home/appuser/app/
RUN carton install
COPY . /home/appuser/app/
EXPOSE 3000

CMD ["carton","exec","--","plackup","-p","3000","-r","myapp/app.psgi"]

amon2/compose.build.yml

base ターゲットをビルドするための compose ファイル
これでビルドしたイメージを使って Amon2 をインストールします

services:
  base:
    build:
      context: .
      dockerfile: ./Dockerfile
      target: base
    image: "takaya030/amon2-base"
    volumes:
      - '.:/home/appuser/app'

amon2/compose.yml

devapp ターゲットのビルドと起動のための compose ファイル
Amon2 をインストールした後はこちらを使ってアプリケーションのイメージをビルドします

services:
  devapp:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: "takaya030/amon2-devapp"
    volumes:
      - '.:/home/appuser/app'
    ports:
      - "3000:3000"
    command: ["carton","exec","--","plackup","-p","3000","-r","myapp/app.psgi"]

amon2/cpanfile

requires 'Plack', '1.0051';
requires 'Amon2', '6.16';
requires 'Amon2::Lite', '0.13';

base イメージのビルド

$ cd amon2
$ docker pull perl:5.40
$ docker compose -f compose.build.yml build base

Amon2 のインストール

base イメージを使ってインストールします

$ docker compose -f compose.build.yml run --rm base carton install

サンプルアプリケーションの作成

$ docker compose -f compose.build.yml run --rm base carton exec -- amon2-setup.pl --flavor=Lite myapp

devapp イメージのビルド

こちらがアプリケーションのイメージとなります

$ docker compose build devapp

動作確認

すべてのビルドが成功した場合は以下のような2個のイメージが作成されます

$ docker images
REPOSITORY                                                 TAG         IMAGE ID       CREATED         SIZE
takaya030/amon2-devapp                                     latest      1bc12fd5ab1c   3 hours ago     1.08GB
takaya030/amon2-base                                       latest      1108e2b78874   3 hours ago     1GB

以下のコマンドでアプリケーションのコンテナが起動します

$ docker compose up -d

web ブラウザで http://localhost:3000 にアクセスして以下の画面が表示されれば成功です

アプリケーションを停止するには下記のコマンドを入力します

$ docker compose down

参考サイト

takaya030.hatenablog.com

qiita.com