前言
在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文件的环境还是存在不少弊端的。