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

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

ただいまの
回答率

90.60%

  • Docker

    660questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 224

damonon

score 3

現在、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を本番にデプロイする、、という流れが正しいのでしょうか?

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • xenbeat

    2018/05/11 13:14

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

    キャンセル

回答 1

checkベストアンサー

+2

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 13:02

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

    キャンセル

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Docker

    660questions

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