前言
在Jenkins持續(xù)集成環(huán)境中構(gòu)建工程時(shí),經(jīng)常需要用到諸如PHP、Nodejs等環(huán)境,如果每增加一個(gè)依賴環(huán)境,就重構(gòu)一次Jenkins,那么顯然工作量會(huì)非常大,且違背了使用Docker的初衷。所以特地研究并記錄了一下如何使用包含了所需環(huán)境的Docker鏡像來(lái)提供命令行的訪問(wèn)方式,這里以PHP為例。
基本原理
將工作目錄以volume的方式掛載到php容器內(nèi),再在容器內(nèi)運(yùn)行指定的腳本,腳本執(zhí)行完成后,容器的生命周期也同時(shí)結(jié)束,并回收相關(guān)資源。
Code
直接用運(yùn)行:
docker run -it --rm --name php -v $PWD:/usr/src/myapp -w /usr/src/myapp php:cli php
將需要運(yùn)行的參數(shù)追加到該命令后面即可。需要注意的是,這里默認(rèn)會(huì)把當(dāng)前工作目錄作為工作環(huán)境,如需要運(yùn)行/var/script.php文件時(shí),則應(yīng)該先cd /var后在該目錄內(nèi)運(yùn)行上述命令(追加script.php于命令后面)
顯然這樣的一個(gè)方式不夠優(yōu)雅,每次都需要輸入一大長(zhǎng)串,這里有兩個(gè)解決方案:
1. Alias
為該命令起一個(gè)別名,如:
alias docker_php='docker run -it --rm --name php -v $PWD:/usr/src/myapp -w /usr/src/myapp php:cli php'
2. Shell 函數(shù)
在你的~/.bashrc,~/.zshrc或者其他類似的文件中定義如下函數(shù):
docker_php () {
tty=
tty -s && tty=--tty
docker run \
$tty \
--interactive \
--rm \
--volume $PWD:/usr/src/myapp \
--workdir /usr/src/myapp \
php:cli php "$@"
}
通過(guò)這兩種方式都可以隨時(shí)在主機(jī)上面使用docker_php命令來(lái)執(zhí)行一些php相關(guān)操作。但是這種方式只是提供了一個(gè)運(yùn)行php文件的環(huán)境還是存在不少弊端的。