
docker
Dockerfile
Dockerfile通常会包含如下命令:
FROM:用于指定父镜像,如centos:7.6.1810,除了注释行,FROM要放在Dockerfile文件的第一行;
ADD:用于添加宿主机的文件、目录等资源到镜像中,会自动解压tar.gz格式压缩包,不会自动解压zip压缩包;
COPY:类似于ADD,也是用于添加宿主机的文件、目录等资源到镜像中,但不会自动解压任何压缩包;
MAINTAINER:标注镜像的作者信息;
LABEL:设置镜像的属性标签;
ENV:用于设置容器的环境变量;
USER:指定运行操作的用户;
RUN:执行shell命令,但必须是非交互式的,例如yum/apt install安装服务一定要加上-y;简单来说,就是构建镜像时执行的命令,或者shell脚本;
VOLUME:用于定义卷,例如将宿主机的某个目录挂载到容器中;
WORKDIR:用于定义工作目录;
EXPOSE:声明要把容器的哪些端口映射到宿主机;
CMD:指定镜像启动为容器时的默认命令或脚本;
ENTRYPOINT:也可以指定容器启动时的命令或脚本,如果和CMD同时使用,会将CMD的命令当做参数传递给ENTRYPOINT后面的脚本
dockerfile 中的每个 FROM、RUN、COPY 命令都会创建一个单独的层,并增加镜像的整体大小和构建时间。
nuxt
上传build
后的.output.zip
执行sh ./build.sh
1 2 3 4 5
| FROM node:18 COPY ./wstest /wstest
COPY ./run.sh /run.sh CMD ["sh", "/run.sh"]
|
run.sh
1 2 3
| #!/bin/bas
exec node /wstest/server/index.mjs
|
build.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/bash
set -e work_path=$(cd "$(dirname "$0")";pwd)
filename="wstest"
clear(){ rm -rf ${work_path}/${filename} } clear
cd ${work_path}
unzip .output.zip
mv .output ${filename}
time=`date +%Y%m%d%H%M%S` tagName="dev.${time}" imgName="hub.io/test/${filename}:${tagName}"
echo "imgName===>${imgName}"
docker build -t ${imgName} .
docker push ${imgName}
clear
|
exec: exec会告诉linux内核,直接在当前shell脚本进程中,加载并执行目标程序;
因为exec会立即抹掉当前shell脚本进程中的各种数据,然后加载并执行目标程序代码,所以在exec命令之后,除了错误检查逻辑外,不应该再有其他逻辑,因为这些逻辑永远都不会被执行了
nginx
dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FROM hub.io/node:14.11.0-slim as builder
WORKDIR /wstest COPY wstest .
FROM hub.io/nginx:h1.0.186312
COPY --from=builder /wstest /usr/local/nginx/html
COPY ./nginx /usr/local/nginx
COPY ./run.sh /run.sh CMD ["sh", "/run.sh"]
|
build.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/bash
set -e work_path=$(cd "$(dirname "$0")";pwd)
filename="wstest"
clear(){ rm -rf ${work_path}/${filename} } clear
cd ${work_path}
unzip dist.zip
mv dist ${filename}
time=`date +%Y%m%d%H%M%S` tagName="dev.${time}" imgName="hub.io/test/${filename}:${tagName}"
echo "imgName===>${imgName}"
docker build -t ${imgName} .
docker push ${imgName}
clear
|
run.sh
1
| exec nginx -g "daemon off;"
|
nginx文件夹
1 2 3 4 5
| nginx ├── access.lua └── conf ├── mime.types └── nginx.conf
|