BLOG2019-09-25Railsオンプレミス製品のためのDockerベストプラクティスver1.0Tweetレトリバの今村です。リリースいたしました。主な変更点となりますが、本記事ではその内容の設計の過程で得られた知見やハマりどころなどを紹介します。まわりの定石」に関する一種の備忘録的な内容となります。改めまして、レトリバ製品開発部の遊び人、今村です。プロフェッショナル揃いのレトリバ製品開発部の中において、何事にも浅く広く馴染んでメンバーの弱点を埋める、遊撃手のような立ち位置で日々お仕事をしております。書いていた気がします。最近はデザインやユーザインタフェースまわりの知見を高めるべく勉強中です。本記事のあらすじオンプレミス提供が基本であるレトリバの製品群には、採用いただいたお客様ごとにどうしても「導入作業」が必要となります。要求スペックや前提パッケージを調べて列挙し、ディレクトリ構成と各ディレクトリの必要空き容量を書き出し、コマンドラインに打ち込むコマンドを1つ1つ並べて期待される出力を併記し......。それをもとにプリセールスエンジニアが客先にて数時間の作業を経て導入作業を完遂する、あるいは完遂できずにてんやわんや......なんてこともなかったわけではありません。いう自分も、レトリバのメンバーが少なかったころはよく導入・アップデート作業に駆り出されたものです。作成して提供することもありました。イメージを提供するのがもっともシンプルで確実性の高い「構成定義」と言えるでしょう。リリースいたしました。よる提供形態の開始(+バグフィックス数点)という変更内容のためプレス等は打ちませんでしたが、大工事ではありました。まわりの設計に関するハマりどころ、選択肢と我々の選択、メンテナンス性を向上させるノウハウなどを散文的・備忘録的にまとめています。なんぞや?という根本的な説明は今や不要でしょうから省略させてください。アプリケーションに固有のノウハウが多めです。いう製品イメージについて2つのコンテナを立て、それぞれ別のシェルスクリプトを実行しています。ジョブワーカーを起動するスクリプトなのですが、いずれも非デーモンのフォアグラウンドプログラムとして起動しています。記したプロセスの死亡」=「コンテナの死亡」として扱え、非可用性の検出が容易になります。指定すべき「主要な用途」というのを定められません。指定せよ、というのも不気味に思えます。エントリは付与していません。行儀のよいイメージではないかもしれませんが...。開発用:./Dockerfile./docker-compose.yml./docker/development/*.sh本番用:./Dockerfile.production./docker/production/docker-compose.yml./docker/production/.env./docker/production/*.shここは一種の「決め」の問題です。試行錯誤の結果でもあります。ファイル、本番環境構築のための同ファイルが混在することとなります。これら2種を混同しないよう、いい感じの棲み分けを試みています。ディレクトリには開発者向けの環境構築時に実行するプロビジョニング用シェルスクリプト等を含めています。ファイルを置いています。オプションをつけないと使えないようにしています。Dockerイメージのtarballファイルと共にお渡しする流れとなります(後述)。打っても下層ディレクトリに至るTAB補完が効かないという点があります。ファイルをお渡しします。内に記載された変数を変更してもらって設定してもらう流れとなります。してもらうことでの導入をプライマリな手順としています。記法を用いることができます。内になかったり空欄だった場合に右辺のメッセージを出力してエラーとなります。したときに生成されるコンテナ群の接頭辞としてこれが用いられます。アプリケーションのバージョンアップ時に混乱しないよう、バージョン番号を含めておくのが適切と考えます。ディレクトリをプロジェクトルートに持ちます。ファイル等が残ってしまうことで不具合の発生要因にもなります。用いたほうが処理の明確化としても明瞭でしょう。オプションを用いるようにしましょう。コマンドとしては長ったらしくなってしまいますが、ボリュームマウントなのかバインドなのかが明示化されることはメリットと考えます。走らせたりできるようになります。よる環境構築の容易化を享受しつつ、慣れた開発ツールでコーディングできるようになります。アプリケーションの導入時に行う作業はいくつかありますが、タイミングは以下のようにしています。導入時に1回のみ実行することを想定しています。まわりの書き方・構造の組み方に関するよしなし事でした。他の製品に今回見出だせたノウハウを浸透させるには時間が要りますが、各製品で一貫した導入手順にてご提供できますよう、これからも推進と改良に励みたいと思います。弊社以外のアプリケーションでここに述べたノウハウがすべて適用できるとは考えにくいですが、本記事から「こんな使い方もできるのか」といった発見が得られたならば幸いです。»ABOUT株式会社レトリバの技術ブログです。レトリバのリサーチャー及びエンジニアが分担して技術的な記事を載せていこうと思います。Inc.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。