如何命令行结束react程序_想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化...

前言

以前一直有疑问困扰着我:人人都在吹的Docker容器化,与前端有何关系?

然而在近两年的编程生涯,在每一次产品迭代中,渐渐体会到了容器化其魅力所在。

应用部署从刀耕火种,到DevOps崛起,原来不止前端在迅捷发展。接下来,我将用一首歌的时间,带大家真实的体验一番Docker容器化。84d956b3892a5056043c0102e518885c.png

1. 朴素的Dockerfile

首先准备一个有标准运行指令的Web应用,用脚手架creat-react-appVue CLI等生成的即可。

以下的Dockerfile不参杂其它依赖,争取做到都能看懂:

# 指定Node版本FROM node:12.18.3# 容器中应用程序的路径。将Web目录作为工作目录WORKDIR /web# 将package.json 复制到 Docker 环境COPY ./package.json /web/package.json# 安装依赖RUN yarn# 将代码复制到Docker容器中的Web目录COPY . /web/# 暴露容器内部访问端口,根据项目变动EXPOSE 8080## 如果是Vue CLi,则换成 yarn serveCMD ["npm", "start"]

是的,开发环境在Docker 部署,关键配置就那么几行。

ffc442bfe7c6b5b5d064c76094bfe12b.png

此外,还需要添加一个.dockerignore文件,加快构建过程的速度

node_modules/**/*build/**/*.DS_Store

2. 为应用构建Docker镜像

首先确认你的Dcoker 正在运行。bc3e9ef399bc6a36bca9f4dcff275489.png

运行以下命令来构建Docker映像。react-docker 可以替换为你要为镜像命名的任何值。

docker build -t react-docker .

其中-t 为打标签的意思,执行完后将会看到:

bedf0090be503c4951a9baa3638812c7.png
Successfully built 137c69857dd0Successfully tagged react-docker:latest

您的镜像已经嗷嗷待发。

3. 运行Docker + React/Vue

现在,使用以下docker run命令, 通过Docker在端口3000上运行React应用。

docker run -p 3000:3000 react-docker

其中:前一个 3000 对应本机http://localhost:3000/,第二个 3000 则是Docker容器端口。

5ddfe984343cdb01064f485223d4eb9f.png

可以通过Dcoker ps查看容器信息ee8ff481dbf439f3eddc6ea411f6879d.png

DockerDashboard中也可以看到:

91d4bb245f096b7a01445bc3763477d3.png

此时打开http://localhost:3000/就会看到熟悉又亲切的画面

5ef8a9a9db601323be6d2667dc033462.png

到这里,你的一首歌的时间之Docker之旅就结束了。接下来的将是更标准化的流程,劝退劝退!

4. Docker Compose 标准化流程

docker-compose.yml文件添加到项目根目录:

version: '3.7'services:  sample:    container_name: sample    build:      context: .      dockerfile: Dockerfile    volumes:      - '.:/app'      - '/app/node_modules'    ports:      - 3000:3000    environment:      - CHOKIDAR_USEPOLLING=true

有了该文件,就不需要分步执行了,直接:

docker-compose up -d --build
9e9eb786522dc8069a0c44e4131bedcc.png

就能看到一样构建了:

54348e5d5e68bd3e7d5a74831047367a.png

5. 生产环境下的Dockerfile

生产环境下需要nginx配置,在根目录先创建nginx.config

server {    listen       ${PORT:-80};    server_name  _;    root /usr/share/nginx/html;    index index.html;    location / {        try_files $$uri /index.html;    }}

让我们创建一个单独的Dockerfile,用于生产环境,称为Dockerfile.prod

FROM node:12.18.3 AS builderWORKDIR /appENV PATH /app/node_modules/.bin:$PATHCOPY package.json ./COPY package-lock.json ./# 前端项目构建命令 — npm ci 或 npm install# http://www.gaoxiukun.com/wp/archives/509RUN npm ci# React 应用需要react-scriptRUN npm install react-scripts@3.4.1 -gCOPY . ./RUN npm run build# 安装nginxFROM nginx:1.17-alpineRUN apk --no-cache add curlRUN curl -L https://github.com/a8m/envsubst/releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst && \    chmod +x envsubst && \    mv envsubst /usr/local/binCOPY ./nginx.config /etc/nginx/nginx.templateCMD ["/bin/sh", "-c", "envsubst < /etc/nginx/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]COPY --from=builder /app/build /usr/share/nginx/html

因为Dockerfile.prod不是默认的执行文件,所以需要构建并标记:

docker build -f Dockerfile.prod -t sample:prod .
3d2ea696ce100ed81b23320f1e2451ca.png

接下来执行docker run

docker run -it --rm -p 3000:80 sample:prod
  • -i: 以交互模式运行容器。
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
  • --rm:在容器退出时自动清理容器内部的文件系统,不懂可忽略
  • -p: 指定端口。

成功运行:7e096e916775c50af73197144f25b2fa.png

在浏览器中导航到http://localhost:3000 以查看该应用程序。

接下来使用新的Docker Compose文件以及docker-compose.prod.yml进行测试:

version: '3.7'services:  sample-prod:    container_name: sample-prod    build:      context: .      dockerfile: Dockerfile.prod    ports:      - '3000:80'

启动容器:

docker-compose -f docker-compose.prod.yml up -d --build

在浏览器中再次进行校验。

555f74fa83b42492f5e23eb01ea7669a.png

❤️ 结语

在以往,我对Docker容器化的概念,仅停留在了解。而真正实操中,也是被一群指令,配置给吓到劝退。

本文弱化了命令行参数,希望能让广大萌新们能先看懂,再去演练一番,举一反三,不再怕Docker,然后再去学习k8s相关。

e11ac27ff97bb19cadd4c1238214eb57.png

Docker 在接下来的几年里,会逐渐成为开发的标配,希望大家能放下对运维领域的偏见,多多学习这些行业内的新标准与概念。

如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

  1. 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  2. 关注公众号「前端劝退师」,不定期分享原创知识。
  3. 也看看其它文章
9fbcad28701deb43c16726773e006d54.png

劝退师个人微信:huab119,或公众号留言,我加你们

也可以来我的GitHub博客里拿所有文章的源文件:

前端劝退指南:https://github.com/roger-hiro/BlogFN 一起玩耍呀。~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是spark的惰性计算?有什么优势?_spark——spark中常说RDD,究竟RDD是什么?

本文始发于个人公众号&#xff1a;TechFlow&#xff0c;原创不易&#xff0c;求个关注今天是spark专题第二篇文章&#xff0c;我们来看spark非常重要的一个概念——RDD。在上一讲当中我们在本地安装好了spark&#xff0c;虽然我们只有local一个集群&#xff0c;但是仍然不妨碍我…

前端websocket获取数据后需要存本地吗_是什么让我放弃了Restful API?了解清楚后我全面拥抱GraphQL!...

背景REST作为一种现代网络应用非常流行的软件架构风格&#xff0c;自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性&#xff0c;可扩展性&#xff0c;伸缩性受到广大Web开发者的喜爱。REST 的 API 配合JSON格式的数据交换&#xff…

子集和问题 算法_LeetCode刷题实战90:子集 II

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01;今天和大家…

隐私计算 2.5 Blakley秘密共享方案

1 简介 作者&#xff1a;Blakley&#xff1b;时间&#xff1a;1979年&#xff1b;理念&#xff1a;基于高斯消元法。 2 具体实现 I 秘密分割算法 II 秘密重构算法 3 实例 设秘密S(3,10,5)S (3, 10, 5)S(3,10,5)&#xff0c;n5n 5n5, t3t 3t3。 I 秘密分割 &#xff0…

conda如何升级pytorch_Google Cloud TPUs 支持 Pytorch 框架啦!

在2019年PyTorch开发者大会上&#xff0c;Facebook&#xff0c;Google和Salesforce Research联合宣布启动PyTorch-TPU项目。项目的目标是在保持PyTorch的灵活性的同时让社区尽可能容易地利用云TPU提供的高性能计算。团队创建了PyTorch/XLA这个repo&#xff0c;它可以让使PyTorc…

隐私计算 2.6 秘密共享的同态特性

1 秘密共享的同态性 秘密共享的同态性&#xff1a;秘密份额的组合等价于组合的秘密共享份额。 假设A、B两方分别有秘密SAS^ASA和SBS^BSB&#xff1b;他们的值被随机拆分为S1A,…,SnAS_1^A, \dots, S_n^AS1A​,…,SnA​和S1B,…,SnBS_1^B, \dots, S_n^BS1B​,…,SnB​&#xff…

二阶龙格库塔公式推导_带你走进最美数学公式

同学们&#xff0c;我们先来跟老师欣赏一下数学中最优美的式子吧&#xff1f;是什么魔力让以上几个似乎毫不相干的数学中最特殊的数字能如此优美的写在同一个式子呢&#xff1f;是欧拉&#xff0c;是数学。0和1——老师就不用介绍啦&#xff0c;e是自然常数(natural constant)&…

隐私计算 2.9 秘密共享应用于横向联邦学习

1 简介 1.1 横向联邦学习 横向联邦学习也称为按样本划分的联邦学习&#xff0c;主要应用于各个参与方的数据集有相同的特征空间和不同的样本空间的场景&#xff0c;例如两个地区的城市商业银行可能在各自的地区拥有非常不同的客户群体&#xff0c;所以他们的客户交集非常小&a…

python缩进说法_【多选题】关于Python程序中与“缩进”有关的说法中,以下选项中错误的是()。...

问题&#xff1a;【多选题】关于Python程序中与“缩进”有关的说法中&#xff0c;以下选项中错误的是&#xff08;&#xff09;。更多相关问题 因方某将赵某打伤&#xff0c;方某住所地的市劳动教养委员会对方某作出劳动教养2年的决定&#xff0c;并将方某送交劳动 根据行政诉讼…

智能测井解释

1 智能测井解释的需求分析 1、岩性识别 2、储层划分 3、参数计算 4、流体判别 5、井数据批量处理 岩性识别&#xff1a;分类任务 曲线预测、曲线补齐&#xff1a;回归任务 2 岩性识别 2.1 岩性识别主要方法简介 目前岩性识别的方法主要有重磁、测井、地震、遥感、电 磁、地…

基于移动设备的OCR识别工作进展(1)

1 模型调研 模型1&#xff1a;Tesseract-OCR 模型2&#xff1a;PaddleOCR Android上面有体验版的demo&#xff1a;https://ai.baidu.com/easyedge/app/openSource?frompaddlelitePP-OCR模型&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/README_…

2020.2idea创建web_IntelliJ IDEA 2017.3 完整的配置Tomcat运行web项目教程(多图)

小白一枚&#xff0c;借鉴了好多人的博客&#xff0c;然后自己总结了一些图&#xff0c;尽量的详细。在配置的过程中&#xff0c;有许多疑问。如果读者看到后能给我解答的&#xff0c;请留言。Idea请各位自己安装好&#xff0c;还需要安装Maven和Tomcat&#xff0c;各自配置好环…

OCR基本原理

学习内容为《动手学OCR.pdf》 1 OCR基础 1.1 OCR是什么 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;&#xff1b; 传统意义上的OCR&#xff1a;面向扫描文档类对象&#xff1b; 一般意义上的OCR&#xff1a;场景文字识别&#xff08…

实用供暖通风空调设计手册 第三版_实用供热空调设计手册第三版即将出版随想...

看到西北院组织豪华的暖通空调大师阵容编写的《实用供热空调设计手册》第三版即将出版的信息&#xff0c;暖通空调人都期盼着2020年底见到具有更多新理念、新技术、新方法、新设备、新材料内容的新版《实用供热空调设计手册》。看到《实用供热空调设计手册》第二版&#xff0c;…

android 北斗定位代码_iPhone 11 确认支持北斗导航,真相来了!

点击 哎咆科技 关注我们最近“北斗”火了。因为7月31日&#xff0c;北斗三号全球卫星导航系统正式开通。截止8月7日&#xff0c;微博话题“北斗三号全球卫星导航系统正式开通”已有5.3亿次阅读、8万次讨论。北斗三号全球卫星导航系统的开通&#xff0c;意味着中国自主研发的北斗…

linux shell rman删除归档_我们一起学一学渗透测试——黑客应该掌握的Linux基础

点击上方「蓝字」关注我们各位新老朋友们&#xff1a;大家好&#xff0c;我是菜鸟小白。欢迎大家关注“菜鸟小白的学习分享”公众号&#xff0c;菜鸟小白作为一名软件测试工程师&#xff0c;会定期给大家分享一些测试基础知识、测试环境的搭建和python学习分享&#xff0c;另外…

PAN++学习笔记

1 主要创新点 文本检测和识别两个任务结合起来&#xff0c;作为互补&#xff0c;提高检测和识别精度&#xff1b;处理不规则形状的文本&#xff1b;提供一个高效的端到端框架PAN&#xff0c;对实时的应用场景友好。 2 已有工作的痛点 将文本检测和识别任务分开&#xff0c;不…

postgresql 遍历字符串数组_每日一道编程题(348):1005.K次取反后最大化的数组和...

1005.K次取反后最大化的数组和每日编程中遇到任何疑问、意见、建议请公众号留言或直接撩Q474356284(备注每日编程)给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次…

python读取mysql数据_Selenium(Python) ddt读取MySQL数据驱动

import unittest from time import sleep from ddt import ddt, data from pymysql import connect from selenium import webdriver def getMySQLTestData(): # 查询数据库的方法 db connect(host"localhost", user"root", password"123456", …

签字后被开除_员工虚假报销公司可以开除吗?

大家好&#xff0c;我是法小明。今天继续和大家聊聊劳动法那些事&#xff0c;很多企业都会有报销制度&#xff0c;但制度难免会有漏洞&#xff0c;如果劳动者钻空子的话公司可以解除劳动合同吗&#xff1f;我们一起看看下面这个例子&#xff1a;小案例陈某系某公司员工&#xf…