基于Docker的PHP命令行界面(CLI)

2017-02-10 14:35
255

前言

在Jenkins持续集成环境中构建工程时,经常需要用到诸如PHP、Nodejs等环境,如果每增加一个依赖环境,就重构一次Jenkins,那么显然工作量会非常大,且违背了使用Docker的初衷。所以特地研究并记录了一下如何使用包含了所需环境的Docker镜像来提供命令行的访问方式,这里以PHP为例。

基本原理

将工作目录以volume的方式挂载到php容器内,再在容器内运行指定的脚本,脚本执行完成后,容器的生命周期也同时结束,并回收相关资源。

Code

直接用运行:

docker run -it --rm --name php -v $PWD:/usr/src/myapp -w /usr/src/myapp php:cli php

将需要运行的参数追加到该命令后面即可。需要注意的是,这里默认会把当前工作目录作为工作环境,如需要运行/var/script.php文件时,则应该先cd /var后在该目录内运行上述命令(追加script.php于命令后面)
显然这样的一个方式不够优雅,每次都需要输入一大长串,这里有两个解决方案:

1. Alias

为该命令起一个别名,如:

alias docker_php='docker run -it --rm --name php -v $PWD:/usr/src/myapp -w /usr/src/myapp php:cli php'

2. Shell 函数

在你的~/.bashrc,~/.zshrc或者其他类似的文件中定义如下函数:

docker_php () {
    tty=
    tty -s && tty=--tty
    docker run \
        $tty \
        --interactive \
        --rm \
        --volume $PWD:/usr/src/myapp \
        --workdir /usr/src/myapp \
        php:cli php "$@"
}

通过这两种方式都可以随时在主机上面使用docker_php命令来执行一些php相关操作。但是这种方式只是提供了一个运行php文件的环境还是存在不少弊端的。

参考

  • https://hub.docker.com/_/php/
  • https://hub.docker.com/_/composer/
帖子评论

关注 / 粉丝

我无话可说