关于docker:使用-docker-构建镜像文件

35次阅读

共计 2766 个字符,预计需要花费 7 分钟才能阅读完成。

应用 docker 构建镜像文件的办法

应用 docker 构建镜像文件,实现一次构建处处应用,从而缩小开发难度。
本文应用 web 动态文件 与 vue 开发文件 为例,应用 Dockerfile 构建 docker 镜像。
@[toc]

1. Dockerfile 文件中相干指令

Dockerfile 是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明。

相干指令含意:

FROM:镜像的根底零碎环境

格局:
FROM nginxFROM 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 (自在转载 - 非商用 - 雷同形式共享 - 放弃署名)

正文完
 0