takaya030の備忘録

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

docker-compose で Mojolicious 8.0 の開発環境を構築

Mojolicious 8.0 がリリースされたので早速 Docker で動作させてみました

検証環境

Windows10 Home Edition
VirtualBox 5.2.16
docker-machine version 0.14.0, build 89b8332
docker-compose version 1.20.1, build 5d8c71b
perl 5.28.0

ディレクトリ構成

mojo
|---app.Dockerfile
|---base.Dockerfile
|---docker-compose.yml
|   
|---app
    |---cpanfile

各種設定ファイル

base.Dockerfileperl の設定などのスタティックな部分のイメージを作成し、 app.Dockerfile で変更の多いソースコードを追加するかたちをとることでイメージのビルドが最小限になるようにしています

base.Dockerfile

FROM perl:5.28.0
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 docker user
RUN useradd -d /home/docker -m -s /bin/bash -u 1000 -g 50 docker

USER 1000

RUN mkdir -p /home/docker/app
WORKDIR /home/docker/app

ONBUILD ADD ./app /home/docker/app

CMD ["true"]

app.Dockerfile

FROM takaya030/perl:5.28.0
LABEL maintainer "takaya030"

EXPOSE 3000

CMD ["carton","exec","plackup","-p","3000","myapp.pl"]

docker-compose.yml

version: "2"
services:
  base:
    build:
      context: .
      dockerfile: base.Dockerfile
    image: "takaya030/perl:5.28.0"
    volumes:
      - ./app:/home/docker/app
  app:
    build:
      context: .
      dockerfile: app.Dockerfile
    volumes:
      - ./app:/home/docker/app
    ports:
      - "3000:3000"
    command: ["carton","exec","plackup","-p","3000","myapp.pl"]
    depends_on:
      - base

app/cpanfile

requires 'Plack', '1.0047';
requires 'Mojolicious', '8.0';

base イメージのビルド

最初に base のイメージを作成します

$ cd mojo
$ docker-compose build base

Mojolicious と Plack のインストール

base イメージを使って app フォルダに MojoliciousPlack をインストールします

$ docker-compose run --rm base carton install

Mojolicious のアプリケーション作成

以下のコマンドでサンプルアプリケーションを作成します

$ docker-compose run --rm base carton exec -- mojo generate lite_app myapp.pl

app イメージのビルド

サンプルアプリケーションを動作させるためのイメージをビルドします

$ docker-compose build app

動作確認

以下のコマンドで Plack サーバーが起動します

$ docker-compose up -d

web ブラウザで http://192.168.99.100:3000 にアクセスして以下の画面が表示されれば成功です f:id:takaya030:20170530233327p:plain http://192.168.99.100:3000/perldoc を開くと Mojolicious の perldoc が表示されます f:id:takaya030:20180923000945p:plain

最後に

app イメージには今回のサンプルアプリケーションの動作に必要なものがすべて含まれているので、別の環境で動作させたい場合はこのイメージをコピーするだけで OK です

参考サイト

Mojolicious - Perl real-time web framework

takaya030.hatenablog.com