はじめに
以前 Docker で Amon2 の開発環境構築の記事を書きましたが、当時と比較して構成が変わってきたので改めて記事にまとめました
検証環境
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