一、nginx容器配置
自启动
将启动脚本复制到 /etc/profile 中,这种方法在docker中并没有生效
添加自启动脚本nginx:
#!/bin/bash
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
# If the daemon file is not found, terminate the script.
test -x $DAEMON || exit 0
d_start() {
$DAEMON || echo -n " already running"
}
d_stop() {
$DAEMON –s quit || echo -n " not running"
}
d_reload() {
$DAEMON –s reload || echo -n " could not reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
# Sleep for two seconds before starting again, this should give the
# Nginx daemon some time to perform a graceful stop.
sleep 2
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 3
;;
esac
exit 0
注:需要将脚本中与nginx相关的路径替换成本地路径
编写脚本start.sh:
/etc/init.d/nginx start
wine "C:\\Program Files\\Java\\jre1.8.0_291\\bin\\java.exe" -jar "D:\\test.jar"
通过docker-compose启动
services:
test:
container_name: "test"
volumes:
- ./cosimcloud/nginx:/etc/init.d/ningx
build:
context: ./test/
env_file:
- ./env/test.env
command: /start.sh
防止容器启动后退出
有以下几种方式添加启动命令:
- dockerfile 中的 CMD、ENTRYPOINT
docker run- docker-compose 中的command
如果指定程序是一个临时的任务,容器启动后状态会变成Exited。这时,可以通过在脚本的最后追加tail -f /dev/null避免容器退出,建议写在sh脚本中。例如:
/etc/init.d/nginx start
wine "C:\\Program Files\\Java\\jre1.8.0_291\\bin\\java.exe" -jar "D:\\test.jar"
exit 0
tail -f /dev/null
nginx 刷新后404
使用try_files尝试加载页面,结尾需要以=404或者/index.php结尾。
location / {
root /usr/share/nginx/html/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
二、docker-compose启动顺序编排
nc命令
nc是netcat的简写,是一个简单、可靠的网络工具。作用如下:
- 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
- 端口的扫描,nc可以作为client发起TCP或UDP连接
- 主机间传输文件
- 主机间网络测速
常用参数如下:
- -l 指定nc将处于侦听模式;被当作server,侦听并接受连接,而非向其它地址发起连接。
- -p 设置端口
- -s 指定发送数据的源IP地址
- -u 使用UDP协议
- -v 输出交互信息
- -w 设置超时秒数
- -z 扫描时不发送数据
脚本配置【entrypoint.sh】
查询依赖容器脚本如下,相关容器需要支持nc命令;该sh脚本适合bash与busybox。
#!/bin/bash
wait_for() {
echo Waiting for $1 to listen on $2...
while ! nc -z $1 $2;
do echo waiting...; sleep $SLEEP_SECOND;
done
}
declare DEPENDS
declare CMD
while getopts "d:c:" arg
do
case $arg in
d)a
DEPENDS=$OPTARG
;;
c)
CMD=$OPTARG
;;
?)
echo "unkonw argument"
exit 1
;;
esac
done
host=${DEPENDS%:*}
port=${DEPENDS#*:}
wait_for $host $port
eval $CMD
该脚本支持 -d与-c选项; -d用于配置依赖的容器;-c用于校验成功后执行的命令。
例如(docker-compose):
services:
system:
container_name: "simtek-modules-system"
env_file:
- ./env/microservice.env
build:
context: ./jar/
args:
JAR_FILE: simtek-modules-system.jar
EXPOSE_PORT: 9200
volumes:
- ./jar/logs/simtek-system:/logs/simtek-system:rw
- ./entrypoint.sh:/entrypoint.sh:rw
entrypoint: sh /entrypoint.sh -d simtek-nacos1:8848 -c 'java -jar /usr/share/simtek-application.jar';
depends_on:
- nacos
- redis
ports:
- "9201:9201"
networks:
simtek-net:
aliases:
- simtek-modules-system
networks:
simtek-net:
driver: bridge
volumes:
db-data:
三、前端项目配置
如何查看项目的vue版本?
-
查询
package-lock.json文件 -
npm list vue
例如:
$ npm list vue
fmumodel@3.4.0 D:\Project\GIT\front\xxx
`-- UNMET DEPENDENCY vue@2.6.12
如何配置vue
-
安装nodeJS
-
配置淘宝镜像:
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 安装vue2
npm install --global vue-cli vue
- error fmumodel@3.4.0 dev:
vue-cli-service serve
npm i
npm run build:prod
四、解决验证码在docker中无效
验证码的生成需要依赖字体,在基础容器中需要配置相关的字体。可在dockerfile中添加以下命令:
RUN apk add fontconfig && fc-cache --force
COPY ./fonts/ "/usr/share/fonts/"
fonts目录存放的是字体,至于复制路径/usr/share/fonts/在不同的镜像中可能不同。
启动后,可以通过以下命令测试字体是否安装成功:
fc-list
五、日志配置
配置redis日志
相关配置如下:
loglevel debug
logfile "redis.log" # 默认不存在需要配置
日志级别:
- debug:会打印出很多信息,适用于开发和测试阶段
- verbose:包含很多不太有用的信息,但比debug要清爽一些
- notice:生产模式
- warning : 警告信息
配置 MySQL日志
错误日志
log-error=/var/log/mysql/error.log
bin日志【主从复制中,server_id需要为唯一】
server_id=99
log_bin = /var/log/mysql/mysql-bin
慢日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/localhost-slow.log
long_query_time = 0.5
log_queries_not_using_indexes
nginx配置日志
容器版本:【nginx:1.19.2-alpine】
相关配置
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log notice;
六、sh语法异常
syntax error near unexpected token $'{\r'' :表示行尾不匹配,需要修复行尾。应当转换setup.sh为 Unix 行尾,方法如下:
- 使用dos2unix
apt-get install -y dos2unix
dos2unix setup.sh
- 使用sed替换行尾
- 使用vscode等编辑软件
七、docker-compose的镜像在局域网下部署
在局域网下,无法连接docker-hub拉取镜像,所以需要将镜像打包后再导入。
# 导出
$ docker-compose images| awk 'FNR > 1 {print $2":"$3}'| sort -u|xargs docker save -o images.tar
# 导入
docker load -i images.tar
awk 'FNR > 2 {print $2":"$3}'从1步骤中获取Repository:Tag镜像列表sort -u去除重复镜像xargs docker save -o images.tar使用2步骤的镜像信息作为docker save命令参数合并导出多个镜像到images.tar文件
八、linux awk命令
语法
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
选项参数说明
- -F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。 - -v var=value or --asign var=value
赋值一个用户定义变量。 - -f scripfile or --file scriptfile
从脚本文件中读取awk命令。 - -mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 - -W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。 - -W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。 - -W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。 - -W lint or --lint
打印不能向传统unix平台移植的结构的警告。 - -W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。 - -W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替^和^=;fflush无效。 - -W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。 - -W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。 - -W version or --version
打印bug报告信息的版本。
运算符
| 运算符 | 描述 | ||
|---|---|---|---|
| = += -= *= /= %= ^= **= | 赋值 | ||
| ?: | C条件表达式 | ||
| 逻辑或 | |||
| && | 逻辑与 | ||
| ~ 和 !~ | 匹配正则表达式和不匹配正则表达式 | ||
| < <= > >= != == | 关系运算符 | ||
| 空格 | 连接 | ||
| + - | 加,减 | ||
| * / % | 乘,除与求余 | ||
| + - ! | 一元加,减和逻辑非 | ||
| ^ *** | 求幂 | ||
| ++ -- | 增加或减少,作为前缀或后缀 | ||
| $ | 字段引用 | ||
| in | 数组成员 |
内建变量
| 变量 | 描述 |
|---|---|
| $n | 当前记录的第n个字段,字段间由FS分隔 |
| $0 | 完整的输入记录 |
| ARGC | 命令行参数的数目 |
| ARGIND | 命令行中当前文件的位置(从0开始算) |
| ARGV | 包含命令行参数的数组 |
| CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
| ERRNO | 最后一个系统错误的描述 |
| FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
| FILENAME | 当前文件名 |
| FNR | 各文件分别计数的行号 |
| FS | 字段分隔符(默认是任何空格) |
| IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
| NF | 一条记录的字段的数目 |
| NR | 已经读出的记录数,就是行号,从1开始 |
| OFMT | 数字的输出格式(默认值是%.6g) |
| OFS | 输出字段分隔符,默认值与输入字段分隔符一致。 |
| ORS | 输出记录分隔符(默认值是一个换行符) |
| RLENGTH | 由match函数所匹配的字符串的长度 |
| RS | 记录分隔符(默认是一个换行符) |
| RSTART | 由match函数所匹配的字符串的第一个位置 |
| SUBSEP | 数组下标分隔符(默认值是/034) |