インフラど素人のメモです。
手元に PHP と PostgreSQL(正確には PostGIS)の docker/docker-compose 環境があり、これをインターネットに公開したい(開発しているシステムを顧客にも試してもらいたい)。
Azure のクレジットが訳あって余ってるんで Azure VM を使います。
CoreOS という VMイメージ には最初から docker が入っているらしいので、 Azure の Virtual Machine から CoreOS を検索して stable なイメージを起動。ケチなのでスペックは 「Standard B1ms (1 vcpu 数、2 GB メモリ)」。 あと自動シャットダウンも付けといたほうが無難。とりあえず user/password でログインできるようにした。 あ、ポートも開けておこう。 HTTP/HTTPS/SSH くらい。Postgres に繋ぎたいなら 5432 も必要。
この VM には docker は入っているが docker-compose は入ってないので 次に、
にしたがって docker-compose をインストール。
さらに、このままだと docker-compose up
をしたときに "Couldn't connect to Docker daemon at http+docker://localhost - is it running?" なんてエラーが出るので、
も実施。
次にローカルPCにある Dockerfile
や docker-compose.yml
やデータファイルを圧縮して VM に転送する。
にある通り、 scp ./docker.zip amay077@xx.xx.xxx.xxx:/home/amay077
のようなコマンドでアップロードできる。
今回使う docker-compose.yml
はこんな感じ。
version: "3"
services:
php:
# image: php:5.6.31-apache
build: ./php
expose:
- "80"
ports:
- "80:80"
volumes:
- ../php/html:/var/www/html
command: php -S 0.0.0.0:80
links:
- db
db:
image: mdillon/postgis:9.5
# build: ./db
ports:
- "5432:5432"
volumes:
- ../../share/sql:/var/sql
- ../../share/postgresql/data:/var/lib/postgresql/data
environment:
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=xxxxxxxx"
相対パスの配置に気をつけて、ローカルと同じようなディレクトリ構成にする。
そして、 docker-compose up
を実行! バックグラウンドで動かすなら docker-compose up -d
。
初回はイメージのダウンロードに時間がかかるが、以下のようなログが出て起動完了したっぽい(このログはローカルと同じだ)。
Creating network "docker_default" with the default driver
Creating docker_db_1 ... done
Creating docker_php_1 ... done
Attaching to docker_db_1, docker_php_1
db_1 | LOG: database system was shut down at 2018-09-18 16:19:41 UTC
db_1 | LOG: MultiXact member wraparound protections are now enabled
db_1 | LOG: database system is ready to accept connections
db_1 | LOG: autovacuum launcher started
外部からのルーティングとかよく分かってないけれど、とりあえず VM のグローバルIP で http アクセスしてみる。
…と、よく分からんが PHP のサイトが見られた。 docker-compose.yml
の設定で 80 ポートは docker に流す、的な設定がしてあるんですかね。
とりあえず目的は果たせた。