[解決済み] docker webdevの良いワークフローは何だろう?
質問
私の予感では ドッカー は私の Web 開発のワークフローを大きく改善する可能性があります。しかし、docker をスタックに追加するプロジェクトにどのようにアプローチすればよいか、まだ頭を整理できていません。
基本的なソフトウェア スタックは次のようになります。
ソフトウェア
-
カスタムLAMPスタックを提供するDockerイメージ(複数可)
- Apache と複数のモジュール
- MYSQL
- PHP
- いくつかのCMS、例えば Silverstripe
-
GIT
ワークフロー
ワークフローは、なんとなく以下のようなものが想像できますね。
開発
-
を書く
Dockerfile
を記述し、上記の要件を満たすLAMPコンテナを定義します。- REQ: マシンは起動直後にapache/mysqlを起動する必要があります。
- dockerイメージのビルド
-
CMSの実行に必要なファイルを、例えば以下のようにコピーします。
~/dev/cmsdir
-
置く
~/dev/cmsdir/
をバージョン管理下に置く
-
置く
-
dockerコンテナを実行し、何らかの方法でマウントする
~/dev/cmsdir
を/var/www/
コンテナ上に - データベースへの入力
-
で作業を行う
/dev/cmsdir/
- コミット&アップ、ドッカーコンテナのシャットダウン
デプロイメント
- リモートホストの設定 (例: ansibleを使用)
- リモートホストにコンテナイメージをプッシュする
-
フェッチ
cmsdir
-プロジェクトを git 経由で取得します。 -
dockerコンテナを実行し、データベースをプルインしてマウントします。
cmsdir
を/var/www
さて、これは紙面上ではとても素晴らしいことですが、これが正しいアプローチかどうかはまったくわかりません。
質問です。
-
ローカルで開発しているとき、コンテナ インスタンスのリブート時にデータベースを持続させるにはどうしたらよいでしょうか。あるいは、コンテナーをスピンダウンする前に毎回 sql-dump を実行する必要がありますか?
-
db と apache サーバー用に別々のコンテナインスタンスを持つべきでしょうか。それとも、上記の使用例では単一のコンテナで十分でしょうか?
-
データベースとサーバーに別々のコンテナを使用する場合、どのようにそれらを同時にスピンアップおよびダウンさせることを自動化できますか?
-
実際にどのように
/dev/cmsdir/
をコンテナにマウントするには/var/www/
-ディレクトリを作成する必要がありますか?を利用すべきでしょうか? データボリューム を使うべきでしょうか? -
何か落とし穴を見逃しましたか?簡略化できるようなことは?
どのように解決するのですか?
-
CMS コンテナとは別にデータベースの持続性が必要な場合、MySQL 用のコンテナと CMS 用のコンテナを使用することができます。この場合、MySQLコンテナはまだ稼働しており、CMSを独立して好きなだけ再デプロイすることができます。
開発用 - もう一つの選択肢は、データボリュームを使用して、ホスト/開発マシンから MySQL データディレクトリをマッピングすることです。この方法では、(ホスト上で) git を使用して (docker 内の) mysql のデータファイルを管理し、(mysql コンテナを起動する前に) いつでも好きなときに初期状態を再ロードすることが可能です。
-
そうですね、db用に別のコンテナを用意した方がいいと思います。
-
私は基本的なスクリプトだけを使っています。
#!/bin/bash $JOB1 = (docker run ... /usr/sbin/mysqld) $JOB2 = (docker run ... /usr/sbin/apache2) echo MySql=$JOB1, Apache=$JOB2
-
はい、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
-
わからない:-)
関連
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み] 既に起動しているDockerコンテナに新しいTTYで入る方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み] Docker compose、net:hostでコンテナを実行する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Docker Compose: そのようなイメージはありません
-
[解決済み] docker イメージの sha256 コードはどこで確認できますか?
-
[解決済み] dockerのホストOSとコンテナのベースイメージOSの関係を教えてください。
-
[解決済み] docker unauthorized: 認証が必要 - ログインに成功するとプッシュされる
-
[解決済み] Alpine Dockerfile --no-cache Vs. rm /var/cache/apk/* の利点。
-
[解決済み] Dockerのデタッチドモード
-
[解決済み] ドッカーENVとRUNエクスポートの比較
-
[解決済み] Dockerfileに複数行のコマンドを改行を維持したまま記述する方法とは?
-
[解決済み] Docker-compose マウントされたボリュームにユーザーとグループを設定する
-
[解決済み] Linuxでdockerを停止する方法