1. ホーム
  2. docker

[解決済み] docker webdevの良いワークフローは何だろう?

2022-08-22 12:29:55

質問

私の予感では ドッカー は私の Web 開発のワークフローを大きく改善する可能性があります。しかし、docker をスタックに追加するプロジェクトにどのようにアプローチすればよいか、まだ頭を整理できていません。

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

ソフトウェア

  • カスタムLAMPスタックを提供するDockerイメージ(複数可)

    • Apache と複数のモジュール
    • MYSQL
    • PHP
    • いくつかのCMS、例えば Silverstripe
  • GIT

ワークフロー

ワークフローは、なんとなく以下のようなものが想像できますね。

開発

  1. を書く Dockerfile を記述し、上記の要件を満たすLAMPコンテナを定義します。
    • REQ: マシンは起動直後にapache/mysqlを起動する必要があります。
  2. dockerイメージのビルド
  3. CMSの実行に必要なファイルを、例えば以下のようにコピーします。 ~/dev/cmsdir
    • 置く ~/dev/cmsdir/ をバージョン管理下に置く
  4. dockerコンテナを実行し、何らかの方法でマウントする ~/dev/cmsdir/var/www/ コンテナ上に
  5. データベースへの入力
  6. で作業を行う /dev/cmsdir/
  7. コミット&アップ、ドッカーコンテナのシャットダウン

デプロイメント

  1. リモートホストの設定 (例: ansibleを使用)
  2. リモートホストにコンテナイメージをプッシュする
  3. フェッチ cmsdir -プロジェクトを git 経由で取得します。
  4. dockerコンテナを実行し、データベースをプルインしてマウントします。 cmsdir/var/www

さて、これは紙面上ではとても素晴らしいことですが、これが正しいアプローチかどうかはまったくわかりません。

質問です。

  1. ローカルで開発しているとき、コンテナ インスタンスのリブート時にデータベースを持続させるにはどうしたらよいでしょうか。あるいは、コンテナーをスピンダウンする前に毎回 sql-dump を実行する必要がありますか?

  2. db と apache サーバー用に別々のコンテナインスタンスを持つべきでしょうか。それとも、上記の使用例では単一のコンテナで十分でしょうか?

  3. データベースとサーバーに別々のコンテナを使用する場合、どのようにそれらを同時にスピンアップおよびダウンさせることを自動化できますか?

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

  5. 何か落とし穴を見逃しましたか?簡略化できるようなことは?

どのように解決するのですか?

  1. CMS コンテナとは別にデータベースの持続性が必要な場合、MySQL 用のコンテナと CMS 用のコンテナを使用することができます。この場合、MySQLコンテナはまだ稼働しており、CMSを独立して好きなだけ再デプロイすることができます。

    開発用 - もう一つの選択肢は、データボリュームを使用して、ホスト/開発マシンから MySQL データディレクトリをマッピングすることです。この方法では、(ホスト上で) git を使用して (docker 内の) mysql のデータファイルを管理し、(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. わからない:-)