[Docker] Cloud9 + PHP 7 環境を軽量なAlpine Linuxで構築する
年末年始ということで、作業環境の大掃除&断捨離をするべく、開発環境をDocker+Cloud9に移行中です。今回は、どのマシンからも同じCloud9環境を短時間で構築するべく、DockerでCloud9を構築します。軽量化もしたいので、ベースはAlpine Linuxにしました。
更新日: 2019.4.2公開日: 2017.12.26
環境
マシン:MacBook 12インチ(early 2016)
Docker: 17.09.1-ce-mac42
docker-compose: 1.17.1
オリジナルのDockerイメージ
こちらのDockerイメージをベースに使わせてさせていただきました。
ディレクトリ構成
cloud9
└── .gitignore
└── c9_config //<--設定ディレクトリ
└── .nakignore
└── metadata
└── project.settings
└── state.settings
└── Dockerfile
└── docker-compose.yml
Dockerfile
FROM anatolinicolae/alpine-cloud9
MAINTAINER c0d3man RUN sed -i -e 's/v3.4/v3.6/g' /etc/apk/repositories
RUN apk --no-cache add php7 php7-fpm php7-mysqli php7-json php7-openssl php7-curl
php7-zlib php7-xml php7-phar php7-intl php7-dom php7-xmlreader php7-ctype
php7-mbstring nginx supervisor curl
Alpine LinuxベースのCloud9 + PHP 7コンテナcode by Koji Kadoma
オリジナルから修正点
レポジトリをv3.6にアップグレードする
オリジナルのDockerイメージはAlpine Linuxのレポジトリがv3.4になっています。
そのまま使う分には問題ないんですが、他のプログラムをインストールしようとすると、レポジトリが最新でないことでエラーになるので、レポジトリを最新にします。
RUN sed -i -e 's/v3.4/v3.6/g' /etc/apk/repositories
他のプログラムをインストール
オリジナルのDockerイメージは、シンプルなCloud9なので、Cloud9のターミナル上で各種プログラムを実行するために、プログラムもインストールします。
今回は、PHPをインストールしていますが、同じ要領で他のプログラムもインストール可能です。
RUN apk --no-cache add php7 php7-fpm php7-mysqli php7-json php7-openssl php7-curl
php7-zlib php7-xml php7-phar php7-intl php7-dom php7-xmlreader php7-ctype
php7-mbstring php7-gd nginx supervisor curl
docker-compose.yml
version: '2.2'
services:
main:
build: .
container_name : cloud9-main
volumes_from:
- cloud9-data
ports:
- "8082:80"
restart: always
cpu_count: 1
cpu_percent: 50
mem_limit: 512000000
data:
image: busybox
container_name: cloud9-data
volumes:
- ~/Workspace:/workspace
- ./c9_config:/workspace/.c9
複数の端末で同じ設定を使いまわすために
Cloud9の設定は、workspace以下の.c9ディレクトリに記録されるので、.c9ディレクトリをgitで管理するために、docker-compoaseと同じディレクトリに「c9_config」というディレクトリを作って、コンテナ内の.c9ディレクトリにマウントします。
- ./c9_config:/workspace/.c9
ただし、metadataディレクトリとstate.settingsファイルは画面の設定の記録なので、こちらは.gitignoreで同期させないようにします。
(都度git pushするのが面倒なので)
c9_config/metadata/
c9_config/state.settings
ここはリアルタイムで保存されると便利なので、Google Driveに移すなり後日対処を考えたいと思います。
ホストマシンの負荷を下げる
メモリをバカ食いしたり、ホストマシンがパツパツになって固まるのは嫌なので、制限を入れています。
cpu_count: 1
cpu_percent: 50
mem_limit: 512000000
起動
準備ができたら起動します。
docker-compose build
docker-compose up -d
イメージサイズ
DockerでCloud9というと、kdelfour/supervisor-dockerがよく出てきますが、ベースイメージをUbuntuなのでイメージサイズ802MBもあります。
今回のAlpine Linuxベースの場合、PHP込みで500M以下(494MB)に抑えることができました。
(ちなみに、オリジナルのanatolinicolae/alpine-cloud9は441MBです)
500MBくらいだとdocker pullもすぐ終わるので地味にうれしいところです。
確認
localhost:8082にアクセスするとCloud9が立ち上がるはずです。
今後の予定
DBサーバーや他のサービスとの連携をやりたいので、docker-compose.ymlを拡張予定です。
簡単にですが、DockerでCloud9(Alpine Linuxベース + PHP)を構築してみました。
このままどっかのサーバーにアップするか、ラズパイZeroあたりでも同じように構築してポータブル開発環境を構築するかなど、Dockerを使っているといろいろイメージが膨らみますね。