skillup

技術ブログ

サーバー・ネットワーク

herokuへのdockerコンテナ送付とdocker volumeについて

投稿日:

herokuへのdockerコンテナ送付

Herokuですが、通常のソースをgitであげる以外にも、Dockerのコンテナをアップロードすることが可能です。

herokuにはProcfileという設定ファイルがあり、PHPだと、

web: vendor/bin/heroku-php-apache2

のように書きます。(書かなくてもdefaultで決まっています。)

herokuでのhttpd.conf設定

PHPのheroku(ヘロク)へのデプロイ

これはheroku上のdyno(heroku上で動くプラットフォームみたいなもの。コンテナ?とほぼ同義)を書いています。

通常はgitでソースをpushして、dynoの上に展開しますが、これをherokuで用意するのではなく、Dockerのコンテナをあげることができます。

ファイル構成

Dockerfile

↑これだけが最低限必須(あとは後述する必要な設定ファイルなどあれば置いておきましょう。)

コマンド

注意点

  • Dockerfileが必須。docker-composeでやっていると、 image: などでDockerfile書かなくてもいけるので要注意
  • docker-compose.ymlの情報は伝達されない。docker-composeでよく行うPORTのbindや設定ファイルの同期ができない
  • PORT→環境変数を使う必要あり(要調査)
  • 設定ファイル→Dockerfile内の記述で COPY conf.yml /etc/conf.ymlなどと書いておき、コンテナに直接設置
  • 基本的に上記のコマンドでできるのはwebアプリ側だけ、DBはaddonなどに別途インスタンスを付与する必要がある。

Dockerで作成したRailsアプリをHerokuにデプロイ

docker volumeの記述

dockerのコンテナとローカルPCのファイルの同期などは

と書けばOKです。一般的にwebアプリなどは開発ソースを同期させる必要があるので上記のように書くと思います。

DBも /var/lib/mysql 直下のバイナリデータを同期しておかないと、コンテナ起動のたびに、初期化されてしまいます。そのため、実データを同期する時に今まで、

のように書いていました。一応これで動いていたので、間違いにきづかなかったのですがdataフォルダが初期化できない・・などのエラーが別端末で出てこれがまずいと発覚しました。

よく調べてみるとデータベースのバイナリデータなどは下記のように書くことが正解のようです。

docker側の設定でローカルと同期する領域などを内部で自動的に決めているようですね。

Dockerのデータを永続化!Data Volume(データボリューム)の理解から始める環境構築入門

 

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

負荷調査のセオリー

以前にも下記リンクで負荷調査について記事を書いたんですが、もう少し掘り下げてみようかと。 サーバーの過負荷の発見 理論編 サーバーの過負荷の発見 メモリ使用率の調査&抽出、置換(awk,sed)コマン …

no image

phpenvで入れたphpの起動スクリプトに関して

以前、CentOS7.7にphp5.3を入れるという案件がありましたが、yumなどでは入らないため、phpenvで入れました。 phpenv5.3+php-fpm が、起動スクリプトを配置していないこ …

no image

Terraform入門(シンプルなEC2の構築)

前回の記事でcloudformationとterraformの比較や紹介をしましたが、terraformがとっつきやすかったため、簡単なサンプルとメモを。 Contents1 インストール2 実行手順 …

no image

ansibleでのインストール

ansibleについてのメモなど。 Contents1 ansibleって何?2 インストール前準備3 ansibleインストール4 SSH鍵登録5 具体的なソフトウェアのインストール6 参考リンク& …

no image

セッションハイジャック

今回はセッションハイジャックについて。WEB系では必須といえるでしょう。 Contents1 セッションハイジャックとは?2 被害3 対策4 Cookieについて4.1 Domain4.2 Path4 …

アーカイブ