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

nginx基本

データベースについて勉強していましたが、実務でnginxを触る機会があったので、これを機に勉強。 Contents1 参考文献2 nginx基礎3 コアモジュール4 httpモジュール5 設定ファイル …

no image

セッションハイジャック

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

no image

mod_rewriteでの注意点

久々にhtaccessでのmod_rewriteをやりまして少しハマった(忘れていたのでポイントを) このネタではタグつけて結構書いてますね・・ http://skill-up-engineering …

no image

HTTPヘッダ・インジェクション+オープンリダイレクタ

Contents1 HTTPヘッダ・インジェクションとは?1.1 被害(ほぼクロスサイト・スクリプティング攻撃による脅威と同じ脅威)1.2 対策2 オープンリダイレクタとは?2.1 対策 HTTPヘッ …

no image

メニュー系のCSS

よく迷うのでこれを機にまとめておこうかと。 Contents1 通常時のメニュー2 携帯(いわゆる縦のメニュー)3 ホバー時の画像選択4 小ネタ 選択されているときのメニュー 通常時のメニュー htm …