共计 2766 个字符,预计需要花费 7 分钟才能阅读完成。
应用 docker 构建镜像文件的办法
应用 docker 构建镜像文件,实现一次构建处处应用,从而缩小开发难度。
本文应用 web 动态文件 与 vue 开发文件 为例,应用 Dockerfile 构建 docker 镜像。
@[toc]
1. Dockerfile 文件中相干指令
Dockerfile 是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明。
相干指令含意:
FROM:镜像的根底零碎环境
格局:FROM nginx
或 FROM node:latest
RUN:用于执行前面跟着的命令行命令
有两种格局:
RUN < 命令 >
RUN [“ 可执行文件 ”,” 参数 1 ″,” 参数 2 ″]
COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定门路。
有两种格局:
COPY < 原门路 > < 指标门路 >
COPY [“< 原门路 >”, “< 指标门路 >”]
< 指标门路 >:容器内的指定门路,该门路不必当时建好,门路不存在的话,会主动创立。
ADD:ADD 指令和 COPY 的应用格局相似(同样需要下,官网举荐应用 COPY),性能也相似。
CMD:为启动的容器指定默认要运行的程序,程序运行完结,容器也就完结。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所笼罩。
相似于 RUN 指令,用于运行程序,但二者运行的工夫点不同:
- RUN 是在 docker build 时运行的
- CMD 是在 docker run 时运行的
留神 :如果 Dockerfile 中如果存在多个 CMD 指令,仅最初一个失效。
格局:
CMD < 命令 >
CMD [“ 可执行文件 ”,” 参数 1 ″,” 参数 2 ″]
ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就能够应用这个环境变量。
格局:ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>
若设置 NODE_VERSION = 7.2.0,在后续的指令中能够通过 $NODE_VERSION 援用
EXPOSE:仅仅只是申明端口
- 帮忙镜像使用者了解这个镜像服务的守护端口,以不便配置映射。
- 运行时应用随机端口映射时,也就是 docker run -P 时,会主动随机映射 EXPOSE 的端口。
WORKDIR:指定工作目录。
用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。当前各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建设目录。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创立的目录才会始终存在。
格局:
WORKDIR < 工作目录门路 >
2. 动态网站的 docker 镜像创立
2.1 首先须要在一个文件夹中筹备三个文件(夹)
- 动态网站所在目录
/dist
Dockerfile
镜像构建文件default.conf
nginx 默认配置文件
2.2 Dockerfile 文件内容
# 拉取 nginx 镜像
FROM nginx:latest
# 将动态网站文件夹拷贝到 nginx 镜像中的对应文件夹中
COPY ./dist /usr/share/nginx/html/
# 将 nginx 配置文件拷贝到 nginx 镜像中对应文件夹中
COPY ./default.conf /etc/nginx/conf.d/
# 申明裸露端口号为 9000
EXPOSE 9000
2.3 default.conf 文件内容
server {
# nginx 监听的端口号,对外裸露端口
listen 9000;
server_name localhost;
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
# 门路匹配
location / {
# 动态文件所在文件夹,需与 Dockerfile 中配置一样
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
default.conf
中配置了网站对外裸露端口,最好与Dockerfile
文件中端口统一
2.4 构建 docker 镜像并运行 docker 容器
# 开始构建镜像 -t 构建镜像的名称: 镜像版本 . 示意当前目录
docker build -t test:v1 .
# 依据构建出的镜像创立运行容器
# -i 以交互模式运行容器,通常与 -t 同时应用
# -t 为容器重新分配一个伪输出终端,通常与 -i 同时应用
# -d 后盾运行容器,并返回容器 ID
# -p docker 容器内外端口映射
# --name 运行容器的名称
# 最初跟上容器镜像的名称
docker run -itd -p 9000:9000 --name test_hello test:v1
# 在浏览器应用 ip:9000 拜访网站
3. Nodejs 构建的网站的 docker 镜像创立
Nodejs 构建的网站:例如 VUE 等
3.1 筹备工作
须要提前准备以下两个内容:
Dockerfile
文件- vue 开发的网站目录中
将 Dockerfile 文件放到 vue 开发的网站目录中,如下图所示:
3.2 Dockerfile 文件内容
FROM node:12
# 复制代码
# 将当前目录所有文件复制到 docker 中的 /app 目录中
ADD . /app
# 设置容器启动后默认运行的目录为 /app
WORKDIR /app
# 运行命令,装置依赖
# RUN 命令能够有多个,能够应用 && 连贯来缩小层级
RUN npm install
# CMD 指令只能有一个,是容器启动后默认运行的命令,是程序的入口
CMD ["npm", "run", "serve"]
# 裸露端口,该端口是 npm run 运行暴露出的端口
EXPOSE 8080
3.3 构建 docker 镜像并运行 docker 容器
# 开始构建镜像 -t 构建镜像的名称: 镜像版本 . 示意当前目录
docker build -t vue_test:v1 .
# 依据构建出的镜像创立运行容器
# -i 以交互模式运行容器,通常与 -t 同时应用
# -t 为容器重新分配一个伪输出终端,通常与 -i 同时应用
# -d 后盾运行容器,并返回容器 ID
# -p docker 容器内外端口映射
# --name 运行容器的名称
# 最初跟上容器镜像的名称
docker run -itd -p 8080:8080 --name vue_test_001 vue_test:v1
# 在浏览器应用 ip:8080 拜访网站
本文首发于自己博客:https://blog.gitnote.cn/post/web2docker
Time:2022-11-22
版权信息: CC BY-NC-SA 4.0 (自在转载 - 非商用 - 雷同形式共享 - 放弃署名)