質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

243閲覧

dockerを使った開発方法について

damonon

総合スコア13

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

2クリップ

投稿2018/05/11 02:51

現在、PHPとAPI(Go)を組み合わせたシステムの開発環境をdockerで構築しようとしています。

その構築方法、また開発方法について疑問点が2点ございますので、よろしければご回答頂ければ幸いです。

#####①dockerをPHPとAPIで個別に立てるべきかどうか
PHPとAPI間は、PHPから出力したファイルの内容をAPIが読み取ることで処理を実施します。
そのため、dockerが個別になるとPHP側のdockerから出力したファイルをAPI側のdockerが受信させるという処理が必要になると思いますが、これはフォルダのマウント機能を利用して運用する感じになるのでしょうか?
それとも、PHP,APIは同じdocker内に構築するべきでしょうか?

####②gitを使用した開発方法について
例えば、APIのdockerを構築するためにgit cloneでAPIのソースをdocker内に取り込んだあと、そのままdocker上で開発したあとはgitへcommitし、また同じdocker上で開発を続けるという流れになるんでしょうか?
しかしこれではvagrantと運用が何も変わらないので、開発は別途違うところで行って完成したソースをdcokerにgit cloneで取り込んで、docker上で動作確認を行い、何も問題なければそのdockerを本番にデプロイする、、という流れが正しいのでしょうか?

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xenbeat

2018/05/11 04:14

アーキテクチャをより詳細に、もしくは図にできませんか?ファイルの内容をAPIが読み取るとかファイルをAPI側のdockerが受信させるとか言葉がよく理解できません。また、Dockerは開発環境のみ利用想定(本番は対象外)でしょうか?もし本番でも利用想定の場合は念のためプラットフォーム(ECS, EC2, VPS等)も教えてください。
guest

回答1

0

ベストアンサー

dockerをPHPとAPIで個別に立てるべきかどうか

APIというのは単にワンバイナリのファイルを加工するプログラムを指しているのですか?
もしそうであれば別にPHPのサーバに含まれる機能ですので、別に同じコンテナ内に存在しても違和感はないかと思います。

しかしAPIがWebサーバのRestfulAPI的なものを指すのである場合、
Dockerの恩恵を受けたければ、常に個別に立てるべきです。

以降は後者の想定で回答していきます。

PHPとAPI間は、PHPから出力したファイルの内容をAPIが読み取ることで処理を実施します。

密結合になってますね。設計悪くないですか?
普通PHPはデータベースやらファイルサーバに書き込んで、そのパスを持ってAPIへ問い合わせる仕組みになると思うのですが。
もしくは直でHTTP通信のPOSTメソッドに吐き出すファイルをまるっと包んで問い合わせるとか…

まぁ、既存のDockerでもディレクトリを共有する機能があります。
docker runコマンドのオプションで-v /host/var:/guest/var等と設定しておくと、ホストマシンとゲストマシンのディレクトリを共有できます。
これを利用してPHPが書き込んだデータをAPIが読み込む仕組みは作れるでしょう。

gitを使用した開発方法について

DockerはLinuxの仮想マシンみたいなものなので、例えばUbuntuのコンテナを用意してapt-getでVimやらGitやらをもりもり落としてきて開発するということも出来なくはありませんがマイノリティです。

エディタもGitもホストマシンにあるのが普通です。
APIコンテナの役割は、-vオプションでGolangのソースコードを流し込んでコンパイル即実行でWebサーバとして起動する事です。
ソースコードを変更したらコンテナを殺して再度立ち上げる感じになります。

本番環境へのデプロイ

本番環境へのデプロイは、Golangがワンバイナリを放り込めばどんな環境でも動く最強の設定ですのであまりDockerの恩恵は受けられないかもしれませんね。

一応Dockerを使う場合、大まかに分けて2通りのデプロイ方法があります

  • 依存モジュールだけを定義したイメージをDockerHubのパブリックリポジトリに上げて、本番環境内で非公開のソースコードやデータと合体させてコンテナを構築する
  • 依存モジュールやソースコードなどを全て包んだイメージをDockerHubのプライベートリポジトリ(有料)に上げて、本番環境はdocker pulldocker runだけで動きますよとする

前者は今までのデプロイ方法と殆ど変わらないでしょう。
まぁ、Dockerはオーバーヘッドが殆どありませんから本番環境でVagrantが使えるようなもので、「僕の環境では再現しませんでしたな不具合が極端に減る」というメリットは享受出来るでしょう。

後者はDockerを活用した新時代のデプロイ方法と呼べそうですね。
有料ですので予算と相談になるかと思います。

投稿2018/05/11 03:28

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

damonon

2018/05/11 04:02

お忙しい中、丁寧に個別回答して頂き大変ありがとうございました。 ご指摘の通りPHPとAPIは密結合になっておりますが、ディリクトリ共有機能で対応したいと思います。(作り直すべきなんでしょうが。。) また開発方法についての質問に対しても具体例を挙げてくださり、大変理解が進みました。 >エディタもGitもホストマシンにあるのが普通です。 >APIコンテナの役割は、-vオプションでGolangのソースコードを流し込んでコンパイル即実行でWebサーバとして起動する事です。 >ソースコードを変更したらコンテナを殺して再度立ち上げる感じになります。 特にこのあたりが自分で調べた限りどうにも確信がなかったので大変助かりました。。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問