Docker を使った Mojolicious 9 開発環境の構築手順の備忘録
検証環境
Windows10 Home Edition (version 21H2)
VirtualBox 6.1.38
vagrant 2.3.1
# Docker Host OS
ubuntu 20.04.3 LTS (Focal Fossa)
Docker version 20.10.8, build 3967b7d
docker-compose version 1.29.2, build 5becea4c
ディレクトリ構成
mojo
├── Dockerfile
├── app
│ └── cpanfile
└── docker-compose.yml
各種設定ファイル
mojobase
で perl の設定などのスタティックな部分のイメージを作成し、 mojoapp
で変更の多いソースコードを追加するかたちをとることでイメージのビルドが最小限になるようにしています
Dockerfile
FROM perl:5.36.0 AS mojobase
LABEL maintainer "takaya030"
WORKDIR /tmp
RUN apt-get update -y && \
apt-get clean && \
rm -fr /var/lib/apt/lists/*
# install carton
RUN cpanm Carton
# create appuser
RUN groupadd -g 1000 appuser && \
useradd -d /home/appuser -m -s /bin/bash -u 1000 -g 1000 appuser
USER 1000
RUN mkdir -p /home/appuser/app
WORKDIR /home/appuser/app
CMD ["true"]
FROM mojobase AS mojoapp
LABEL maintainer "takaya030"
COPY ./app /home/appuser/app
EXPOSE 8080
CMD ["carton","exec","plackup","-p","8080","myapp.pl"]
docker-compose.yml
version: "3.4"
services:
base:
build:
context: .
dockerfile: ./Dockerfile
target: mojobase
image: "takaya030/mojobase"
volumes:
- ./app:/home/appuser/app
app:
build:
context: .
dockerfile: ./Dockerfile
target: mojoapp
image: "takaya030/mojoapp"
volumes:
- ./app:/home/appuser/app
ports:
- "8080:8080"
app/cpanfile
requires 'Plack', '1.0050';
requires 'Mojolicious', '9.27';
mojobase イメージのビルド
最初に mojobase
のイメージを作成します
$ cd mojo
$ docker-compose build base
Mojolicious と Plack のインストール
mojobase
イメージを使って app
フォルダに Mojolicious と Plack をインストールします
$ docker-compose run --rm base carton install
Mojolicious のアプリケーション作成
以下のコマンドでサンプルアプリケーションを作成します
$ docker-compose run --rm base carton exec -- mojo generate lite_app myapp.pl
mojoapp イメージのビルド
サンプルアプリケーションを動作させるためのイメージをビルドします
$ docker-compose build app
動作確認
以下のコマンドで Plack サーバーが起動します
$ docker-compose up
web ブラウザで http://Dockerホスト:8080 にアクセスして以下の画面が表示されれば成功です