良いdocker webdevワークフローは何でしょうか?


121

私がいることを予感していドッキングウィンドウが大幅に私のwebdevのワークフローを改善できるが-しかし、スタックにドッキングウィンドウを追加するプロジェクトにアプローチする方法を私はかなりの周り私の頭をラップするために管理していません。

基本的なソフトウェアスタックは次のようになります。

ソフトウェア

  • カスタムLAMPスタックを提供するDockerイメージ

    • 複数のモジュールを持つApache
    • MYSQL
    • PHP
    • 一部のCMS、たとえばSilverstripe
  • ギット

ワークフロー

ワークフローは次のようになると想像できます。

開発

  1. Dockerfile上記の要件を満たすLAMPコンテナを定義するを作成します
    • REQ:マシンは起動直後にapache / mysqlを開始するはずです
  2. Dockerイメージをビルドする
  3. CMSの実行に必要なファイルをegなどにコピーします。 ~/dev/cmsdir
    • ~/dev/cmsdir/バージョン管理下に置く
  4. Dockerコンテナーを実行~/dev/cmsdir/var/www/て、コンテナーにマウントします
  5. データベースに入力する
  6. で働く /dev/cmsdir/
  7. Dockerコンテナーをコミットしてシャットダウンする

配備

  1. リモートホストを設定します(例:ansible)
  2. コンテナーイメージをリモートホストにプッシュする
  3. cmsdirgitを介したプロジェクトのフェッチ
  4. Dockerコンテナーを実行し、データベースをプルしてマウントcmsdirします/var/www

さて、これは紙の上ではすべてとてもきれいに見えますが、これがまったく正しいアプローチであるかどうかはよくわかりません。

質問:

  1. ローカルでの開発中に、コンテナインスタンスの再起動間でデータベースを保持するにはどうすればよいですか?または、コンテナーをスピンダウンする前に毎回sql-dumpを実行する必要がありますか?

  2. dbとapacheサーバーに個別のコンテナインスタンスを用意する必要がありますか?それとも、上記のユースケースでは単一のコンテナがあれば十分でしょうか?

  3. データベースとサーバーに別々のコンテナーを使用している場合、それらを同時に上下に自動化するにはどうすればよいですか?

  4. 実際にどのように/dev/cmsdir/コンテナーの/var/www/ディレクトリにマウントしますか?これにはデータボリュームを使用する必要がありますか?

  5. 私は落とし穴を逃しましたか?簡略化できるものはありますか?


1
この質問はかなりの数の人にとって興味深いようです。最近、誰かがこのトピックに関するブログシリーズを書いたようです。それが今のように終了しなかったので、私はこのコメント内のリンクを投稿します: project-webdev.blogspot.de/2015/05/...
jottr

回答:


46
  1. CMSコンテナとは別にデータベースの永続化が必要な場合は、MySQL用に1つのコンテナとCMS用に1つのコンテナを使用できます。そのような場合、MySQLコンテナを実行したままにすることができ、独立してCMSを何度でも再デプロイできます。

    開発の場合-別のオプションは、データボリュームを使用してホスト/開発マシンからmysqlデータディレクトリをマッピングすることです。この方法で、(ホスト上で)gitを使用してmysql(docker内)のデータファイルを管理し、いつでも(mysqlコンテナーを開始する前に)初期状態を「再ロード」できます。

  2. はい、db用の別のコンテナーが必要です。

  3. 私は基本的なスクリプトだけを使用しています:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. はい、data-volumes -vスイッチを使用できます。これを開発に使用します。読み取り専用のマウントを使用できるため、必要に応じてこのディレクトリに変更を加えることはありません(アプリはデータをどこかに保存する必要があります)。

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    とにかく、最終的な展開のために、私はdockerfileを使用してビルドしてイメージを作成します ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. 知りません :-)



48
間違いなく、このプロセスにはさらに多くのチュートリアル/ベストプラクティスが必要です。:(
Reza S

このチュートリアルでは、あなたにいくつかの方向性を与えるかもしれない...
Pithikos

DockerのGithubからコードを取得することに興味
jhtong

4
@RoyTruelove 2015年現在、figは非推奨になり、
docker


4

現時点ではこの投稿が1年以上前のものであることを理解していますが、最近、よく似た質問をして、あなたの質問にいくつかの素晴らしい答えを示しました。

  1. MySQL Dockerインスタンスをセットアップして、データをステートレスデータコンテナーに保持できます。データコンテナーはアクティブに実行されている必要はありません。

  2. はい、Webサーバーとデータベース用に個別のインスタンスを用意することをお勧めします。これがDockerの力です。

  3. 私が構築しているこのレポをチェックしてください。基本的にはmake buildmake runと同じくらい簡単で、ローカルでWebサーバーとデータベースコンテナーを実行できます。

  4. -v初めてコンテナを実行するときに引数を使用すると、コンテナ上の特定のフォルダが、コンテナを実行しているホストにリンクされます。

  5. 私はあなたのアイデアは素晴らしいと思います、そしてあなたが求めているすべてを達成することは現在可能です。

ここにあなたがリストしたすべてのニーズを達成するターンキーソリューションがあります。


1

開発ワークフローの要件に一致する、使いやすいdocker composeセットアップをまとめました。

https://github.com/ehyland/docker-silverstripe-dev

主な特徴

  • 永続的なDB
  • HHVM+ NGINXまたはApache2+の選択PHP5
  • xDebugを使用してブレークポイントをデバッグおよび設定する

README.mdはあなたが始めるためには明らかに十分でなければなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.