docker入门之摆设前端项目,以create-react-app为例

代码 代码 1343 人阅读 | 0 人回复

<
1.github上先下载create-react-app的源码
  1. git clone https://github.com/facebook/create-react-app.git
复造代码
施行ls检察一下并cd 进进该项目.
2.正在项目根目次下创立Dockerfile文件,并编写以下内乱容
  1. vi Dockerfile  // 创立文件
  2. 编写内乱容:
  3. # node版本号
  4. FROM node:15-alpine
  5. # 事情目次
  6. WORKDIR /create-react-app
  7. # 增加一切文件到create-react-app目次
  8. ADD . /create-react-app
  9. # 施行号令
  10. RUN npm install && npm run build && npm install -g http-server
  11. # 表露端标语
  12. EXPOSE 3000
  13. # 容器启动以后, 施行http-server 注:./build是指挨包后的文件
  14. CMD http-server ./build -p 3000
复造代码
3.创立image文件
  1. docker image build --progress plain -t create-react-app-demo .
复造代码
施行成功后, 检察一下image文件
150526g81t8zek0ig51ol5.jpg

4.从image文件天生容器:
  1. // 将Dockerfile中表露出去的3000端心映照到本机的1234端心
  2. docker container run -p 1234:3000 create-react-app-demo
复造代码
然后正在当地施行http://localhost:1234/, 成功~
150526xg8a0ox8ouwa1a5u.jpg

是否是小有成绩感? 那您便错了,一般事情里没有会那么用哈哈哈哈。
看看运转的create-react-app的镜像多年夜:docker images
150527fypgwkisjb2eeeu2.jpg

吓人!一个g…普通的前端项目挨包事后的代码也便几十兆,然后您一个docker便要一个G?减载起去工夫也很冗长…运维哭晕正在茅厕,仍是看看怎样劣化一下吧
操纵镜像缓存
1.package.json算是相对不变的吧,正在出有新的装置包需求下载的时分,那个文件是无需从头构建的吧?! 仿佛有面原理,盘他!
vim Dockerfile从头修正一下设置疑息
  1. # node版本号
  2. FROM node:15-alpine
  3. # 事情目次
  4. WORKDIR /create-react-app
  5. # 增加一切文件到create-react-app目次
  6. ADD package.json package-lock.json /create-react-app
  7. ADD . /create-react-app
  8. # 施行号令
  9. RUN npm install && npm run build && npm install -g http-server
  10. # 表露端标语
  11. EXPOSE 3000
  12. # 容器启动以后, 施行http-server 注:./public是指挨包后的文件
  13. CMD http-server ./build -p 3000
复造代码
每次修正完设置文件以后皆需求从头构建镜像:
  1. docker image build --progress plain -t create-react-app-demo .
复造代码
150527p37elymll8833m8s.jpg

接下去操纵ci代替npm install.ci会比npm install的施行速度快,并且当package.json跟package-lock.json没有婚配时,ci会报非常
  1. # node版本号
  2. FROM node:15-alpine
  3. # 事情目次
  4. WORKDIR /create-react-app
  5. # 增加一切文件到create-react-app目次
  6. ADD package.json package-lock.json /create-react-app
  7. ADD . /create-react-app
  8. # 施行号令
  9. RUN npm ci
  10. RUN npm run build && npm install -g http-server
  11. # 表露端标语
  12. EXPOSE 3000
  13. # 容器启动以后, 施行http-server 注:./public是指挨包后的文件
  14. CMD http-server ./build -p 3000
复造代码
再从头构建一次镜像
150528eubyrgbd68t8y6b2.jpg

嗯。。。构建工夫是劣化了那末一面,接下去看看1G的体积吧 吓人!!!!
体积那末年夜,底子皆回功于我们npm install的时分天生的node_module了吧。那把node_module弄失落,该当会小很多,试一波呗
我们只需求静态天生的静态资本,那便只提与编译后的文件,并且布置项目举荐用ngnix,以是那里也需求把http-server的镜像干失落 ,改成用ngnix的。
那 再改改dockerfile设置文件。vim dockerfile
  1. FROM node:15-alpine as builder
  2. WORKDIR /create-react-app
  3. ADD . /create-react-app
  4. ADD package.json package-lock.json  /create-react-app
  5. RUN npm ci
  6. RUN  npm run build
  7. FROM nginx:alpine
  8. COPY --from=builder /create-react-app/build /usr/share/ngnix/html
复造代码
ngnix/html是布置项目时需求增加编译文件的途径,那里需求先抓与一下ngnix的image:
docker pull nginx:alpine
推下去事后我们进进该容器看一下施行成功了出docker run -it --rm nginx:alpine sh
150528u4q1awc3yyfha3cp.jpg

成功以后我们再从头构建一下image
docker image build -t create-react-app-demo .
然后再施行docker images ,哈哈哈哈小成绩感又去了~~~
150529mwkw4g7zgioi3eyy.jpg

总结:
镜像中利用基于 alpine 的镜像,加小镜像体积。
镜像中需求锁定 node 的版本号,尽量也锁定 alpine 的版本号,如 node:15-alpine。
npm ci 交换 npm i,制止版本标题问题及前进依靠装置速度
package.json 零丁增加,充实操纵镜像缓存
只提与编译文件(多阶段构建),加小镜像体积

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则