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

vagrantでサーバーの状態を保存(snapshot)

上司がAnsible(構成管理ツール)のサンプルをくれたのですが、試そうにもまっさらなサーバーを用意しないといけません。 サーバー環境を新規に契約するのは面倒なのでvagrantで当然考えています。 …

no image

vimの小ネタ(主にテキスト置換系に関して)

前回に引き続き、またまたvimの小ネタなど Contents1 マクロ2 単純な置換3 改行系の置換4 一括置換 マクロ エディタ上である動作を記録させておきたい場合、q+任意の文字(例えばa)+任意 …

no image

herokuでのLet’s Encrypt設定

herokuで運用しているアプリでhttps設定(Let’s Encrypt)をしたいという要望があり、調査、設定をすることに。 当然herokuでなくても大丈夫です。 過去に行ったhtt …

no image

Webの高速化に関して

Webの高速化に関してメモ。 高速化って言っても幅広いんですけどね。自分が行なっている対策に関して。 一応LAMP環境を前提にしてます。 Contents1 一番大事なのは測定2 DB対策3 フロント …

no image

PHP7に関して

先週きづいたのですが、PHPが5.6から7になりましたね。 まあ当分はまだPHP5で開発していきますが、herokuがいきなり7になり、アプリが動かないということが起こりました。 7対応させたかったん …

アーカイブ