前面的文章介绍了使用docker-compose.yaml配置文件直接启动nginx,php容器,其中entrypoint参数是容器运行后要执行的命令,entrypoint.sh配置文件需要在提前的镜像中配置好,这样就可以直接使用这个配置文件了,配置文件如下:
启动nginx服务
#!/bin/bash
#set -e 选项可以让你的脚本在出现异常时马上退出,后续命令不再执行
#set -o pipefail。这个特别的选项表示在管道连接的命令中,只要有任何一个命令失败(返回值非0),则整个管道操作被视为失败
#set -u 比较容易理解,Bash会把所有未定义的变量视为错误。默认情况下Bash会将未定义的变量视为空,不会报错,这也是很多坑的来源
set -euo pipefail
# shopt -s nullglob 通配符*匹配文件时,如果没有匹配到任何文件时,那就会输出null string,而不是通配符字符本身
shopt -s nullglob
# allow arguments to be passed to nginx
# $@ 传递给脚本或函数的所有参数
# ${str:a:b} 表示提取字符串a开始的b个字符
# ${@:2} 表示提取除第一个参数外所有的参数
if [[ ${1:0:1} = '-' ]]; then
EXTRA_ARGS="$@"
set --
elif [[ ${1} == nginx || ${1} == /usr/local/nginx/sbin/nginx ]]; then
EXTRA_ARGS="${@:2}"
set --
fi
# allow arguments to be passed to nginx
if [[ ${1:0:1} = '-' ]]; then
EXTRA_ARGS="$@"
set --
elif [[ ${1} == nginx || ${1} == /usr/local/nginx/sbin/nginx ]]; then
EXTRA_ARGS="${@:2}"
set --
fi
# default behaviour is to launch nginx
if [[ -z ${1} ]]; then
echo "Starting nginx..."
exec /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -g "daemon off;" ${EXTRA_ARGS}
else
exec "$@"
fi
启动php服务
#!/bin/bash
set -eo pipefail
shopt -s nullglob
/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |