Composer
docker
DockerHub

Composer入りDockerImage作成時スピードアップのためのTips

CircleCIの実行時間を短くするために、DockerImageの作成を行ったのですが、
どうせなら composer install も早くしたいと思って @Hirakuさんのプラグイン等を導入しています。

数十秒程度改善される場合もあるのでおすすめです。
なお、Laravelだと依存関係のパッケージが多いため10倍くらい早くなるらしいです。

以下、Dockerfileです。
mshimao/php7.1-apache-postgres-composer-php-extensionsで公開してます。

FROM php:7.1-apache

RUN \
  apt-get update \
  && apt-get -y install git unzip zlib1g-dev libpq-dev libicu-dev libpng12-0 libpng-dev \
      postgresql netcat

# extensions install
RUN \
  docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
  && docker-php-ext-install pdo pgsql pdo_pgsql zip intl gd mbstring

# composer install 
RUN \
  curl -sS https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer

# make composer fast in japan
RUN  composer config -g repositories.packagist composer https://packagist.jp && \
    composer global require hirak/prestissimo

ENV LANG ja_JP.UTF-8

以下でcomposerの参照先をpackagist.jpに変更しています。

composer config -g repositories.packagist composer https://packagist.jp

以下でcomposerを並列処理にするhirak/prestissimoを入れてます。

composer global require hirak/prestissimo

おまけ1

Dockerhubへのpushは以下の3コマンドで終わるのでカンタンです

docker login
docker build -t username/hoge ./
docker push username/hoge

おまけ2

Ansibleも作ったので貼ります。

---
# install composer
- name: check composer
  stat: path=/usr/local/bin/composer
  register: composer_bin
  tags: composer

- block:
  - name: download composer
    get_url:
      url: https://getcomposer.org/installer
      dest: /tmp/installer

  - name: install composer
    shell: cat /tmp/installer | php -- --install-dir=/usr/local/bin

  - name: rename composer.phar to composer
    shell: mv /usr/local/bin/composer.phar /usr/local/bin/composer

  - name: make composer executable
    file:
      path: /usr/local/bin/composer
      mode: a+x
      state: file

  - name: composer speed up(1/2)
    shell: /usr/local/bin/composer config -g repositories.packagist composer https://packagist.jp

  - name: composer speed up(2/2)
    shell: /usr/local/bin/composer global require hirak/prestissimo

  when: not composer_bin.stat.exists
  tags: composer