答え
$ s2i build --copy ./html centos/php-70-centos7 php-image
$ docker run -p 80:8080 php-image
$ s2i build --copy "ドキュメントルートに配置したいソースコードがあるローカルフォルダ" centos/php-70-centos7 "docker イメージネーム"
$ docker run -p 80:8080 "docker イメージネーム"
以上、「Docker + PHP7 + CentOS7の環境を世界最速で作る方法」でした。
これで、http://localhost/
に接続できます。
ここまでの経緯
[Docker + PHP7 + CentOS7]この環境を作りたいなと思って、色々と調べていて、個人でDockerのイメージをアップされている方の記事などを参考にさせて頂いていたのですが、私が一番気に食わなかったのが、ほとんどの情報が[--privileged]このオプションを指定してコンテナを特権モードで起動させていることです。
これは[systemctlでサービスの自動起動をon]→[/sbin/init]でサービスを起動させているからです、これをするためには特権モードが必要となります。
これは問題あるのではないか、コンテナから様々な資源にアクセスできてしまう、セキュリティ的に問題があるので、きっと別の方法があると思い、色々調べて見つけました。
解説
dockerのインストールは飛ばします。
s2i(source-to-image)
s2iとはソースからdockerイメージを作ってくれるフレームワークです。
これを用いて、CentOSが公式に様々な環境を用意してくれています。
https://hub.docker.com/u/centos/
CentOS公式これ重要
これだけで何も考えなくてもいいww
インストール方法
$ brew install source-to-image
今回はPHPと書きましたが、[python,ruby,nodejs]など様々な環境を用意してくれているので、上に書いたものと同じイメージでサクッと開発環境作れてしまいます。
仕組みの概要
CentOSが開発環境を丸っと用意してくれているので、実際のアプリのソースコードだけ引数で渡してあげて、イメージを作っています。
で、そのイメージでコンテナを立ち上げるだけ。
サービスの起動の仕方
もちろん特権モードの必要なくサービスが起動されるようになっています。
ソースコードを覗いてみると
[exec httpd -D FOREGROUND]
でサービス起動していました。
直接起動させているから特権モード必要ないわけですね。
僕はこれを探していました。
まとめ
簡単に説明させていただきましたが、s2iコマンドでは今回の様なローカルのソースコードだけではなく、github上のリモートのソースコードを指定してイメージを作成することも可能です。
また、「centos/php-70-centos7」イメージも外側からApatchの設定をカスタマイズできるので、柔軟な設計になってます。
詳しくはこちらを参照ください
https://hub.docker.com/r/centos/php-70-centos7/