使用Docker可以快速在不同机器上运行构建好一致的运行环境,越来越多的被用在项目生产中。而 Composer 基本是PHP开发必不可少的包管理工具。
但在实际PHP开发部署过程中,Composer对于环境与依赖的判断源自于运行Composer的PHP环境,不同的运行方式,对于Composer的执行情况产生运行。
因为Composer限制root权限运行,因此Docker容器并不能直接shell运行Composer,如果直接在本机安装 Composer ,那么则依赖于机器本身的 PHP 环境,而使用Composer官方的镜像,则基于构建源的PHP版本环境。而在项目开发中,为了保证可靠,还是应用使用与项目一致的 PHP环境来运行 Composer。
首先 为项目 PHP 的 Dockerfile 增加 Composer 可以直接使用 Docker 的 multi-stage 功能直接从官方源复制
FROM php:7.1-fpm # 或者指定你自己build好的镜像 # # .... 自身项目PHP环境配置 ... 建议直接基于已经 build 好的镜像 # # 增加 TINI (这里直接使用二进制 也可以使用镜像对应的包管理安装) ENV TINI_VERSION v0.17.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /sbin/tini RUN chmod +x /sbin/tini # COPY composer ENV COMPOSER_ALLOW_SUPERUSER 1 COPY --from=composer:1.6 /usr/bin/composer /usr/bin/composer # 在镜像中增加 composer COPY --from=composer:1.6 /docker-entrypoint.sh /composer-entrypoint.sh WORKDIR /app ENTRYPOINT ["/composer-entrypoint.sh"] CMD ["composer"]
build 镜像 并标记 tag
docker build -t my-composer ./
在本地创建持续存储 composer 全局数据目录
mkdir ~/.composer
配置本地 .bash_composer 环境增加 composer 命令运行
composer () { tty= tty -s && tty=--tty docker run \ $tty \ --interactive \ --rm \ --user $(id -u):$(id -g) \ --volume $(pwd):/app \ --volume $HOME/.composer:/tmp/composer \ -e "COMPOSER_HOME=/tmp/composer" \ my-composer "$@" }
在 .bash_rc 或者引用 .bash_composer 文件,使用 source 命令引入
. "~/.bash_composer"
开始使用,并且配置中国镜像
composer config -g repo.packagist composer https://packagist.laravel-china.org