xb18
xb18
文章39
标签0
分类0
docker

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
# 执行shell脚本
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

# html静态文件
COPY --from=builder /wstest /usr/local/nginx/html

# nginx配置
COPY ./nginx /usr/local/nginx

# 执行shell脚本
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
本文作者:xb18
本文链接:http://xb18.github.io/2023/11/30/docker/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可