第5章: docker-compose の活用例 (Perl)

 実際の開発現場での活用の場合 docker コマンドより docker-compose コマンドを使った方が使い勝手がよいとおもいます。ここでは docker-compose がなんであるのかというような詳細な説明は一旦省き、具体的な記述例を紹介してゆきます。

詳細な解説は公式ページを参考にしてください。

5.1 作成する docker 環境について

今回は Perl を題材にして汎用的なスクリプトを作成するための環境を作ってみたいと思います。基本的な考え方は他の言語でも共通する部分はあると思いますので他の言語を活用されている方でも参考にしてみてください。

5.2 準備する各ファイルの説明

下記のようなファイル構成を目指してゆきます。

(任意のディレクリを作成 今回は ~/tmp/docker_sample/perl)
% mkdir -p ~/tmp/docker_sample/perl && cd ~/tmp/docker_sample/perl
(ファイルの中身は下記の記事参考)
% touch Dockerfile docker-compose.yml hello.p

各ファイルの中身については任意のテキストエディタで作成ください。

Dockerfile (イメージを作成するためのファイル)

FROM perl:5.32.0
RUN cpanm Carton && mkdir -p /usr/src/app
WORKDIR /usr/src/app

docker-compose.yml (compose コマンドで実行するファイル)

version: '3.8'
services:
  app:
    container_name: ctr_perl5_32_0
    build:
      context: .
    image: perl5_32_0:carton
    volumes:
      - .:/usr/src/app
    stdin_open: true
    tty: true

hello.pl (起動テスト用のスクリプト)

use strict;
use warnings;
use utf8;
print "Hello Perl!!\n";

5.3 docker-compse の実行例

コマンドの解説

  • docker-compose up --build -d
    • docker-compose.yml を実行、初動の時のみ --build, -d はバックグラウンド起動
  • docker-compose exec app /bin/bash
    • docker-compose.yml の services app の中に入る
  • docker-compose exec app carton install
    • docker-compose.yml の services app に対してコマンドを実行
  • docker-compose stop
    • コンテナのバックグラウンド終了
  • docker-compose start
    • コンテナをバックグラウンドで開始
(イメージ作成からコンテナ、バックグラウンド起動まで)
% docker-compose up --build -d
(作ったコンテナで作業)
% docker-compose exec app /bin/bash
(コンテナの中でスクリプト実行)
# perl hello.pl
(コンテナの中でモジュール追加 Moose の場合)
# echo "requires 'List::MoreUtils', '0.428';" >> cpanfile
# carton install
(インストールしたモジュールを使う場合)
# carton exec -- perl hello.pl
(コンテナ終了)
# exit
(コンテナの外からモジュールを追加したいとき Text::CSV の場合)
% echo "requires 'Text::CSV', '2.00';" >> cpanfile
% docker-compose exec app carton install
(コンテナのバックグラウンド終了)
% docker-compose stop
(次回からの実行)
% docker-compose start

5.4 まとめ

  • ここでは拡張モジュールインストールの再現性を高めるためにイメージに carton を含めた
  • モジュールのインストールや作成したスクリプトを実行するときはコンテナ経由にしたいのでコンテナはバックグラウンドで起動させておく

5.5 次回

今回は汎用的なPerl実行環境をつくってみました、ここでの紹介事例が基本になってゆくので、docker-compose.yml の記述例についての詳細は公式ページのリファレンスで調べてみてください。

次回は Perl web アプリ開発環境の場合の事例を紹介したいと思います。