ikasama over technology

忘れたくないことを忘れないために

Docker 上の PHP 環境に Composer コンテナでパッケージをインストールする

https://hub.docker.com/r/composer/composer/

リンク先に書いてあることが全てなんですが、それだとあんまりなのでちょっと説明しておきます。

ざっくりいうと、PHP 環境のコンテナとは別に Composer の入ったコンテナを用意して、 docker run --rm でスポット的に動かします。

1. イメージを pull する

$ docker pull composer/composer

これを書いている時点で、Hub に push されているイメージのバージョンは 1.2.0 でした。

$ docker run --rm composer/composer --version
Composer version 1.2.0 2016-07-19 01:28:52

最新のものがほしければ、ソースからビルドすればよいです。

github.com

2. composer.json を書く

適当に欲しいものを書いてください。

{
  "require": {
    "smarty/smarty": "~3.1",
    "ezyang/htmlpurifier": "*"
  }
}

3. 実行する

$ docker run --rm -v $(pwd):/app composer/composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing smarty/smarty (v3.1.31)
    Downloading: 100%

  - Installing ezyang/htmlpurifier (v4.9.3)
    Downloading: 100%

Writing lock file
Generating autoload files

4. docker run がめんどくさい人は

PATH が通ったところにシェルスクリプトを置きましょう。

$ sudo sh -c "cat >/usr/local/bin/composer" <<'EOF'
#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
echo "Current working directory: '"$(pwd)"'"
docker run --rm -v $(pwd):/app -v ~/.ssh:/root/.ssh composer/composer $@
EOF
$ sudo chmod +x /usr/local/bin/composer
$ composer --version
Current working directory: '/home/ikasamak/work/docker-lamp/html/selfphp'
Composer version 1.2.0 2016-07-19 01:28:52