Dockerでふるーーいphp5.2環境の構築
PHPの古い環境用意するのに、調べたこと、やったことをメモ。
参考
これだとurlがrewriteに対応していないので追加
docker pull image
dockerイメージを取得します
docker pull tommylau/nginx
docker pull mysql:5.7
docker image list
itkaasan@itkaasan-ThinkPad:~/work/$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 2f52e94d8acb 12 days ago 373MB tommylau/nginx latest 75d215ac1943 12 months ago 109MB tommylau/php-5.2 latest 7e7ee5c92d52 13 months ago 371MB
my.cnfとnginxの設定ファイルをコンテナからコピー
MySQLの設定ファイルとnginxの設定を上書きしたいので設定ファイルをコンテナからマシンにコピーします、
※取り急ぎコピーして作ったものを記事の一番最後に貼っておきます
docker cpコマンドにて設定ファイルを複製しました。
あとはこのファイルをカレントディレクトリに置いて、起動させます
hogeディレクトリを、マウントディレクトリとしてrunコマンドで起動・開始します
mysql5.7コンテナを作成
hogehogeという名称のDBも一緒に作成しました
mysql5.7とリンクしながらphp5.2の入ったコンテナを起動
php5.2とリンクしつつ、nginxを起動
http://localhost:9000
で、アクセスできます
取り急ぎ無事動きを確認してからと思ったのでdocker-composeに対応していません。。今度対応しよう。。
docker -v オプションで、コンテナにファイルを上書きできるっていうのは初めて知った。
nginxの設定ファイルとmysqlの設定ファイル
docker MySQL 後からバージョンをかえる
docker-compose.yml に記載しておいたMySQLのバージョンを後からやっぱり変えたい時。
Laravel5.4とMySQL5.6では相性が悪いので、MySQLのバージョンを上げることになったので、なんとなくメモ。
Laravel5.4から標準のcharasetがutf8mb4に変わったことに起因します
そこで、あとからやっぱりMySQLのバージョンを変更したい時の手順です。
docker imageなければ追加
docker-compose.ymlのMySQLのバージョンを5.7に変更
docker stop mysql56 docker
docker rm mysql56 docker
docker-compose up -d
一度MySQLコンテナごと破棄しているので、もう一度migrationを実行する必要があります。
HelloDockerFile!!DockerFileからPHP7×MySQL5.7×Apache環境を作る
HelloDockerFile!! 初めてのDockerFileからPHP7×MySQL5.7×Apache環境を作る
Docker Hubにはたくさんの公式リポジトリがあって phpの公式のイメージももちろんあるのですが、試した結果やはりCentOS7をベースに構築した方がなんだかんだ良いということになりました。
ざっくり手順をまとめましたので何かの参考になれば幸いです
docker pullでMySQLの5.7バージョンのイメージをpullする
docker pull mysql:5.7
pullしたmysql:5.7のイメージからMySQLサーバーコンテナを起動する
docker runコマンドでコンテナ名の指定とMySQLのrootユーザーのパスワードとイメージの指定を行って起動します。
起動したMySQLコンテナにSequel Proを使ってアクセスする
クライアントPC(Dockerのコンテナをインストしたマシン)から見ると今起動したMySQL5.7のコンテナはlocalhostになるので127.0.0.1(localhost)の見方になります。
先ほど設定したrootのパスワードを指定してログインします。
起動したMySQLコンテナにログインしてMySQLを直接叩く
ターミナルからコンテナにログインして、クエリを直接叩くことも可能です。
手順としては、docker psコマンドで起動中のMySQLコンテナのCONTAINER IDをコピーしてdocker exec コマンドでコンテナの中に入り、先ほど設定したMySQLのrootパスワードを指定するだけです
CentOS7イメージをベースにPHP7のイメージを作成する
ざっくり構成と手順
- CentOS7のイメージをベースにPHP7のDockerFileを作成
- docker imageをビルド
- docker runでコンテナを作成・起動
参考
Dockerコンテナ内のCentOS7にPHP7をインストールする
今回はPHPについてのみ必要だったので、NPMパッケージ周りのインストールは取り外しました。
ビルド実行
カレントディレクトリにDockerFileがある想定で(DockerFileがあるディレクトリ出ないと buildできません)
ビルドしたらdocker run で起動します
解説
apahceのデフォルトのDocumentrootディレクトリと、Dockerを起動しているクライアントマシンのソースコードのディレクトリを指定します。これでDockerのCentOS中のApacheのDocumentRootがリンクしてくれます
コンテナのすべてのデバイスへのアクセス許可の設定になります。説明が長くなるので下記リンクを参照してください。
詳しくはこちら。
ポート番号8000としました。ポートフォワードしてます。なので、今回 Dockerで起動したコンテナにブラウザからアクセスする場合はhttp://localhost:8000と、なります。
にしてあげればhttp://localhost/でアクセスができますので、本番環境をDockerで起動したコンテナとする場合は80ポートをそのまま使ってあげれば良いことになります。
コンテナの名称は何も設定しなくても問題ないですが、よくわからない謎のコンテナ名がランダムでつけられるので管理の都合としても設定した方が良いです。imageの名称は省略できません。何のイメージを使ってそもそもコンテナを立ち上げるか
というコマンドなので必須です。imageが存在しなければ失敗します。
フォアグランドで実行できるようにすることです。画面上で動かすことがフォアグランドですね。あとでDockerのコンテナにログインしてApacheをごにょごにょして再起動するのにこのオプションが必要になります。
そのほか各種設定の為に必要なこと
コンテナへアクセス
DockerのApacheは直後はそもそも起動していません。.htaccessの許可もされていない、 phpはエラーも吐かない設定になっているので、PHPがインストされたCentOS7のDockerコンテナにアクセスして 各種設定をしてからApacheを起動してあげる必要があります。
これらはDockerの説明ではなくあくまでもCentOS7にインストされているApacheの設定とやり方は同等になります。
PHPからMySQLへのアクセス
クライアントマシンからブラウザベースでアクセスするときはlocalhostですが、対コンテナ間ではlocalhostではアクセスすることはできません。
IPアドレスを取得して
それからIPアドレスベースでMySQLに繋げばいいですね
Sequal ProなどMySQLへDockerをインストしているクライアントマシンから直接アクセスする際はlocalhostでアクセスできますね。
まとめ
プロジェクトでちょいちょいDockerを使うことが増えたのでDockerFileを初めて書いてbuildしてみたのですが、PHPからMySQLへコンテナ間の通信をする方法がわからなかったり、
当たり前に使っていたapacheの再起動が使えなかったりとかなり戸惑いました。本当であればdockerをrunしてコンテナの起動のタイミングとapacheを同時に起動したかったのですが、
/usr/sbin/httpd -DFOREGROUND
と、すればApacheがDockerの立ち上げと同時に立ち上がることも分かっているのですが、すると今度はapacheの再起動ができません。CentOS7のサービス(デーモン)が使えないのです。
ちょっと今後の課題とします・・・
なお、PHP7は公式イメージもあるのですが、色々設定を変えようと思った際、Mobyを公式は使っていて、CentOS系の知見に頼りたかったが為にCentOS7ベースで構築しました。
結果、この方が構築には早かった次第です
Docker不要なコンテナ、イメージを大掃除!コンテナとイメージの一括削除
Docker不要なコンテナ、イメージを大掃除!コンテナとイメージの一括削除
go言語を最近趣味で始めたのですが何せ始めたばかりなもんで次々dockerのイメージを追加しまくってdockerのイメージリストがすごいことに。。
そんな訳で、今回はぐっちゃぐちゃになったDockerのイメージとコンテナのお掃除をしたいと思います!
コンテナの削除
まずはコンテナの削除から。コンテナに対して使ってないイメージの削除 という手順が取れるのでまずはコンテナから削除しています。
コンテナの一覧
CONTAINER IDを指定して対象のコンテナを削除する
このとき、コンテナは停止してないと削除することができません。
再度コンテナの一覧
停止中だろうがとにかくコンテナ一括削除してやるぜオラオラー!
-f フォースオプションをつけて強制的にオラオラ一括削除
今回だと一括削除だけれども、起動中のコンテナIDを指定して削除するケースでもforceオプションつけることで強制削除が可能。
続きましてー、イメージの削除
どんどんイメージ追加していくと、コンテナよりもイメージがどんどん増えてしまいますねー。
### イメージ一覧
IMAGE IDを指定して削除
発生するエラー
複数のリポジトリから参照されているイメージだから削除できないよ。強制的にやって
とあります。
IMAGE IDを指定して強制削除
未使用のイメージの一括削除
所要時間わずか5分!Microsoft AzureでWordPress on Dockerが使える!
Microsoft AzureでWordPress on Dockerが使える!
開発環境と本番環境で環境の差分はつきもの。だったら最初から環境が全く同じ、Docker で開発してるのなら検証サーバーも本番サーバーもDockerで環境統一した方が楽じゃない?ってなことでMicrosoft AzureでDockerを入れて、WordPressのイメージも突っ込んでみました。所要時間はなんと5分ほど。このブログ記事書いてる方がよっぽど時間かかっちゃったよ。
まずはMicrosoft Azureのクラシックサーバーに Dockerをインストールするところから
SSHよりクラウドサーバにアクセス
SSHから作成したAzure のサーバーにアクセスします。
WordPressより先にMySQLコンテナを追加
DBの名称、ユーザ名 パスワードを設定します。
次にWordPressのコンテナを入れます。xxxxはコンテナ名なので自由に設定。-p 8080:80でポートフォワードしています。
これだけで終了!!!!2つしかコマンドを打っていませんね!素晴らしい。
ブラウザからアクセス
事前にAzureのコンパネから80ポートの解放は行っておいて ブラウザからアクセスできるようにしてあげます。
無事設置が完了しました!