Day 14: DockerFile实作Node前後端 (下)

Node前端

今天来讲Vue前端的与postgres包入进docker,和後端编译後直接放入相比,前端多了一个转dist的过程,也就是npm build,Vue的prodcution步骤详细如下:

  1. 程序写完
  2. npm build build成一个dist档
  3. dist档放入web server,例如nginx、apache

因此dockerfile需要两个环境,步骤2需要node环境,而步骤3则需要webserver环境,有什麽办法能够堆叠这两个环境呢?有的,就是multi-stage builds

Multi-stage build

在multi-stage build中,每一个FROM都是一个基础的base,并且每一个都会是一个新的stage互不干扰,你可以透过COPY的方式将上个stage的产出结果COPY到下个stage,如以下范例,我们需要产出两个stage分别是node与web server:

FROM node:latest as build-stage
WORKDIR /usr/src/app
COPY . .
RUN npm install && npm run build

FROM httpd:2.4 as production-stage
COPY --from=build-stage /usr/src/app/dist /usr/local/apache2/htdocs/
EXPOSE 80
CMD ["httpd-foreground"]

如上build-stage会build档案,然後produciton-stage会将build-stage的结果copy过来,build-stage会自动删除,节省最终image大小

  • docker build -t myweb:latest .
  • docker run -d -p 8085:80 --name run_myweb --network itban_network myweb:latest

成功执行:
https://ithelp.ithome.com.tw/upload/images/20210919/201190446pwzjbEJMR.png

Postgres资料库

资料库的部分其实更常是跟着docker-compose一起使用,但是我这里来讲一下单独建立与进入postgres的方法,postgres资料库有许多重要参数:

建立:

  • docker volume create pgdata
  • docker run -d --name my_postgres --network itban_network -e POSTGRES_PASSWORD=password -e PGDATA=/var/lib/postgresql/data/pgdata -v pdata:/var/lib/postgresql/data -p 5432:5432 postgres

Postgres docker可以设定许多参数,详细可以参考这里,其中POSTGRES_PASSWORD是必填的,此外资料库内容会保存在/var/lib/postgresql/data中,默认对外开启5432 port。

进入:

  • docker exec -it -u postgres my_postgres bash

-u指定自己的身分为postgres进入my_postgres,接着执行psql就能开始使用了

  • psql

成功进入:
https://ithelp.ithome.com.tw/upload/images/20210919/201190443ZzNyY1WRv.png

参照Gihub,我帮你把环境变数写好了,最终可以得到:

https://ithelp.ithome.com.tw/upload/images/20210926/20119044jM5iXq1kjA.png

Table是从资料库里面捞出来的。


<<:  [2021铁人赛 Day-01] 前言 and 嵌入式系统简介

>>:  002-新鲜人

CWE和CVE

在软件开发生命周期(SDLC)的设计阶段(建筑和详细设计)完成後,我们必须进行审查。威胁建模是设计审...

C#入门之字符串转义

前面讲了 C# 的中特殊字符,这篇就来讲讲 C# 中的字符串转义吧。详细的转义序列表,可以查看微软官...

Proxmox VE 虚拟机防火墙管理 (二)

当我们已经开始使用防火墙规则管理连出入的网路传输时,随着制订规则数目越来越多,在管理上就会遇到开始...

[Python 爬虫这样学,一定是大拇指拉!] DAY05 - URL / URN / URI (1)

本篇章主要是先从技术层面来解释 URI 与 URL 及比较少使用到却与生活息息相关的 URN,让读者...

Day30 语法改革!零基础新手也能读懂的JS - 最终回!

终於来到我们第三十天,在最後的第三十天,我想说几句完赛感言! 其实无法想像我居然有这个毅力可以撑过一...