Bitbucket Pipelines安装php-soap扩展及自定义Docker配置咨询
在Bitbucket Pipelines中为garak/docker-php7:7.1安装php-soap扩展
针对你的需求,我整理了两种可行方案,你可以根据实际场景选择:
方案一:运行时临时安装php-soap扩展
因为garak/docker-php7:7.1基于PHP官方镜像构建,所以可以直接用官方提供的docker-php-ext-install工具安装扩展。不过安装soap前需要先搞定系统依赖,你可以把安装步骤直接写在Pipelines的script环节里:
image: garak/docker-php7:7.1 pipelines: default: - step: name: 安装php-soap并执行任务 script: # 安装soap依赖的系统库 - apt-get update && apt-get install -y libxml2-dev # 安装并启用php-soap扩展 - docker-php-ext-install soap # 验证扩展是否安装成功 - php -m | grep soap # 这里替换成你原本的构建/测试命令 - echo "执行你的业务逻辑"
这种方式的好处是配置简单,不用额外维护镜像;缺点是每次Pipeline运行都会重复安装依赖和扩展,会多花一点时间。
方案二:内嵌自定义Docker配置到Pipelines(无需拉取外部仓库)
如果不想每次都重复安装扩展,你可以把安装soap的逻辑直接写进自定义Dockerfile里,然后在Pipelines中构建这个镜像来使用,完全不用依赖外部GitHub仓库。
你可以在配置里直接内嵌Dockerfile内容,分步骤构建和使用:
pipelines: default: - step: name: 构建包含php-soap的自定义镜像 image: atlassian/default-image:3 services: - docker script: # 生成临时Dockerfile文件 - | cat > Dockerfile << EOF FROM garak/docker-php7:7.1 # 安装依赖并添加soap扩展,最后清理缓存减小镜像体积 RUN apt-get update && apt-get install -y libxml2-dev \ && docker-php-ext-install soap \ && apt-get clean && rm -rf /var/lib/apt/lists/* EOF # 构建自定义镜像 - docker build -t php71-with-soap . # 推送到Bitbucket私有镜像仓库(可选,下次运行可直接拉取复用) - docker tag php71-with-soap $BITBUCKET_REGISTRY/php71-with-soap - docker push $BITBUCKET_REGISTRY/php71-with-soap - step: name: 使用自定义镜像执行任务 image: $BITBUCKET_REGISTRY/php71-with-soap script: # 验证扩展 - php -m | grep soap # 执行你的业务命令 - echo "执行你的业务逻辑"
如果不想拆分步骤,也可以在单个步骤里直接构建并运行:
pipelines: default: - step: name: 用自定义镜像运行任务 image: atlassian/default-image:3 services: - docker script: # 直接通过标准输入构建镜像 - docker build -t php71-soap - << EOF FROM garak/docker-php7:7.1 RUN apt-get update && apt-get install -y libxml2-dev && docker-php-ext-install soap EOF # 在容器中挂载当前目录并执行命令 - docker run --rm -v $(pwd):/app -w /app php71-soap sh -c "php -m | grep soap && echo '执行你的业务逻辑'"
这种方案的优势是后续运行可以复用已构建的镜像,节省时间;唯一需要注意的是要确保Pipeline有Docker服务的使用权限,以及如果推送到私有仓库,要配置好对应的权限。
内容的提问来源于stack exchange,提问作者nnikolay
相关产品推荐
相关产品推荐

