前言

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

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

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

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 部署,关键配置就那么几行。


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

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

2. 为应用构建Docker镜像

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

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

docker build -t react-docker .

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


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容器端口。


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

DockerDashboard中也可以看到:


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


到这里,你的一首歌的时间之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

就能看到一样构建了:


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 .

接下来执行docker run

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

成功运行:

在浏览器中导航到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

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


❤️ 结语

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

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


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

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

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

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

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

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

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

  1. c语言用命令行编译运行程序_使用C程序执行系统命令

    c语言用命令行编译运行程序 Sometimes, we may need to execute Linux/Windows DOS commands through our C program. (N ...

  2. docker web程序本地化_想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化...

    前言 以前一直有疑问困扰着我:人人都在吹的Docker容器化,与前端有何关系? 然而在近两年的编程生涯,在每一次产品迭代中,渐渐体会到了容器化其魅力所在. 应用部署从刀耕火种,到DevOps崛起,原来 ...

  3. 命令行执行java程序_命令行执行

    每当您旅行到一个居民说不同寻常的母语的国家时,您都可能会用一些基本的生存短语武装自己,例如"这要花多少钱?","这是哪种肉?"和"哪里在洗手间吗?&q ...

  4. 如何用命令行写java程序_如何用java实现doc命令行

    如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了. 不过有点小bug就是当你进去的是文件就会提示空指针异 ...

  5. 用一首歌时间将 React 应用 Docker 化,成为前端 Star!

    作者 | 前端劝退师 责编 | 郑丽媛 来源 | 前端劝退师(ID:quantuishi) 以前一直有疑问困扰着我:人人都在吹的Docker容器化,与前端有何关系? 然而在近两年的编程生涯,在每一次产 ...

  6. javase开发工具包中的什么命令负责运行应用程序_想当程序员?先搞懂JavaSE、JavaEE和JavaME之间的区别吧!...

    Java是一门比较灵活的编程语言,且目前行业90%的应用软件服务器端都采用Java语言进行开发,而Java编程的相关技术人才始终是各领域技术型岗位不可或缺的. 作为0基础或者想转行当程序员最好还是先搞 ...

  7. 如何用命令行运行python程序_如何使用运行python代码命令行.exe从C应用程序?

    下面的例子运行命令运行TCL脚本(我已经安装在我的计算机上了),您只需要替换命令就可以运行Python并添加脚本文件. 注意脚本文件名后面的"&exit"命令-这会使cmd ...

  8. C#中的样板命令行工具应用程序

    目录 介绍 概念化这个混乱 处理命令行参数 异常处理 用户界面 过期文件处理 编码此混乱 MSBuild支持 用于在C#中构建命令行工具应用程序的入门代码.该样板代码为应用程序提供异常处理和命令行参数 ...

  9. 使用Chatkit构建Node.js命令行聊天应用程序

    by Hugo 雨果 使用Chatkit构建Node.js命令行聊天应用程序 (Build a Node.js command-line chat application with Chatkit) ...

最新文章

  1. [UE4]UMG和关卡坐标变换、旋转小地图
  2. python爬取音乐神器_Python爬虫提取神器,正则表达式(re模块),全程干货!
  3. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  4. ASP.NET-get与post模式的区别
  5. android生成png图片,Android 中将 base64图片 解码为.png图片
  6. Hadoop小知识点
  7. H哥亲测可用!一个点外卖省钱的小技巧!
  8. 线性反馈移位寄存器LFSR和循环冗余码CRC
  9. SpringBoot集成Jsoup爬虫——三级列表
  10. android 遥控器方向,最简单DIY基于Android系统的万能蓝牙设备智能遥控器
  11. 34.ADC基本原理与配置
  12. 敏捷史话系列(一)| 用一半的时间做两倍的事——Jeff Sutherland
  13. EXCEL技能1:SUMIFS 小白详解
  14. 4天快速落地团队内部的UI组件库
  15. 电力系统仿真软件python_PySpice: 使用ngspice进行电路仿真分析-1:安装
  16. 实现:您必须使用微信内置浏览器访问本页面! 的功能
  17. 我为什么要做富文本编辑器【wangEditor5总结】
  18. 如何快速绘制电气原理图,回路图
  19. freemarker将xml转为html,Freemarker 实现Html 静态化
  20. 中英文字体库打包下载

热门文章

  1. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF
  2. QT学习笔记(十四):QLayout的属性介绍
  3. JavaSE——异常处理(异常简介、try-catch-finally、throws、throw)
  4. Auto.JS 开发
  5. 小甲鱼 OllyDbg 教程系列 (三) :PJ 软件功能限制
  6. Docker 学习资料
  7. 微服务架构设计模式~识别系统操作
  8. 二叉堆时间复杂度 php,二叉堆(Binary Heap)
  9. java单例方法_Java单例模式
  10. 微软 rms服务器端,微软RMS服务器部署之准备篇