分12PerlのWebアプリケーションをDocker化する方法メインとなる本節では,PerlのWebアプリケーションをDocker化する方法について紹介します。PerlがインストールされたDockerイメージの構築まずは,PerlがインストールされたDockerイメージが必要です。5.20.2に加え,いずれのプロジェクトでも必要になるcpanminusとCartonをインストールするためのDockerfileの例をリスト2に示します。Cartonリスト2では,ベースのイメージとしてdebian:wheezyを選んでいます。GNU/Linuxは初期のイメージサイズが比較的小さいため,特別な理由がなければベースのイメージとして選択することをお勧めします。Perlのビルドにはperl-buildを用いています。Dockerfileと同じディレクトリで次のコマンドを実行すると,Perl入りのDockerイメージを構築できます。.本当にPerlがインストールされているかを確認するために,コンテナを起動してみましょう。--versionを実行します。--version-iと-tオプションにより,シェルによるインタラクティブな操作が可能になります。続いて,PerlのWebアプリケーション向けのDockerfileの書き方を紹介します。Dockerfileの書き方は,プロジェクトのソースコードとCPANモジュールをDockerイメージ内に取り込むかどうかにより異なります。ソースコードとCPANモジュールをイメージ内に取り込む方法を説明し,次にイメージ内に取り込まない方法を紹介します。Container方式と呼ぶことにします(注2⁠)⁠。注2)筆者独自の命名です。Container方式のDockerfileをリスト3に示します。リスト2のDockerfileでビルドしたPerl入りのDockerイメージをFROMに指定しています。FROMによる継承を使わずに,リスト2に続けて,リスト3の内容を書いたDockerfileを用意してもよいでしょう。["carton","exec","plackup","-a","script/local-server"]リスト3ではまず,libmysqlclient-devなどのCPANモジュールが依存するパッケージをインストールします。プロジェクト内のcpanfileの内容によって,ここでインストールすべきパッケージは異なります。次に,Webアプリケーションコードを配置するディレクトリを作成します。/codeディレクトリ以下にWebアプリケーションコードが配置されるようにします。これ以降は/codeディレクトリ以下で作業するため,WORKDIRにより,カレントディレクトリを変更します。installを実行します。installの実行より先に,COPY命令によりcpanfileをDockerイメージ内に取り込んでいるところです。installを実行すれば済みます。installしかし,COPY命令は取り込むディレクトリ以下の内容が変化するとビルドキャッシュが無効になり,COPY命令以下の命令はスキップされません。installが一から実行されるため,開発効率が低下します。installを実行するようにします。Changed」で紹介されていたテクニックです。最後に,CMD命令によりplackupを実行し,Webアプリケーションを起動します。runコマンドの引数により上書きできます。したがって,本番やステージングなどの環境に合わせて,ワーカ数を変化させて起動できます。次のコマンドにより,リスト3のDockerfileをビルドし,コンテナを起動します。5000:5000を指定して,コンテナの外から5000番ポートでアクセスできるようにします。Container方式では,WebアプリケーションコードとCPANモジュールをDockerイメージ内に持ちません。Volume機構によりホスト側のファイルシステム上のディレクトリをマウントして,コンテナ内から参照できるようにします。Container方式のDockerfileを示します。Volumeとして指定している点です。/codeまず,次のコマンドでリスト4のDockerfileをビルドします。Container方式はあくまでPerlの実行環境のみを提供しています。installは実行されません。installを実行する必要があります。runには-vオプションを付けて,ホスト側のディレクトリをマウントしています。--rmオプションを付けることで,コマンドの実行の終了と同時にコンテナを破棄します。runによりPlackサーバを起動します。script/localserver両方式の比較Dockerの思想の一つに,ローカル開発環境で動作実績のあるコンテナをそのまま本番環境まで持っていくというものがあります。Container方式のメリットは,Dockerイメージ内にWebアプリケーションの動作に必要なものがすべて入っていることです。HubやDistributionにpushして,本番環境からpullするというフローを作りやすいと思います。buildを実行しなければなりません。installをスキップできるとはいえ,ローカル開発環境に導入するには少々面倒です。ほかにもGitのブランチごとにWebアプリケーションコードが異なるケースでのDockerイメージの管理などを考えると,どんどん新しい課題が出てきます。やりたかったことはソフトウェアの依存関係の解決ですので,ローカル環境と本番環境で同じランタイム上でWebアプリケーションを実行できれば十分だと思います。Container方式はOSとPerlの実行環境のみを提供することにより,変化の激しいWebアプリケーションコードとDockerイメージのビルドを分離できます。副次的なメリットとして,手元のファイルシステムにWebアプリケーションコードとモジュールがあるため,これまでの開発パラダイムを大きく変えないということがあります。CIのようなCIサーバに任せるのが自然です。Container方式でビルドしてpushするという方法もあると思います。Container方式を採用するのがよいと考えています。Container方式の採用を前提とします。<続きの(3)はこちら。2013年に株式会社はてなに入社。WebオペレーションエンジニアとしてMackerel,はてなブログを始めとしたWebサービスのサーバ・ネットワーク構築と運用を担当する。計算機システムのしくみと性能,サーバオペレーションの自動化について関心がある。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。業務を改善する情報共有の仕掛け~DevOpsの実現,RPAの導入に向けて~ソフトウェア開発の業務改善をテーマに,DevOps実現の手順やそれを助けるツールとの連携,RPAによる社内ドキュメントの管理や効率化について解説します。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。