自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何優(yōu)雅地將Docker鏡像從1.43G瘦身到22.4MB?

開(kāi)發(fā)
今天,我們將容器化一個(gè)ReactJS應(yīng)用程序,并學(xué)習(xí)一些關(guān)于如何減少鏡像大小并提高性能的技巧。

Docker鏡像的大小對(duì)于系統(tǒng)的CI/CD等都有影響,尤其是云部署場(chǎng)景。我們?cè)谏a(chǎn)實(shí)踐中都會(huì)做瘦身的操作,盡最大的可能使用Size小的鏡像完成功能。下文是一個(gè)簡(jiǎn)單的ReactJS程序上線的瘦身體驗(yàn),希望可以幫助大家找到鏡像瘦身的方向和靈感。

如果你正在做Web開(kāi)發(fā)相關(guān)工作,那么你可能已經(jīng)知道容器化的概念,以及知道它強(qiáng)大的功能等等。

但在使用Docker時(shí),鏡像大小至關(guān)重要。我們從create-react-app(https://reactjs.org/docs/create-a-new-react-app.html)獲得的樣板項(xiàng)目通常都超過(guò)1.43 GB。

今天,我們將容器化一個(gè)ReactJS應(yīng)用程序,并學(xué)習(xí)一些關(guān)于如何減少鏡像大小并提高性能的技巧。

我們將以ReactJS為例,但它適用于任何類型的NodeJS應(yīng)用程序。

步驟1:創(chuàng)建項(xiàng)目

1)借助腳手架通過(guò)命令行模式創(chuàng)建React項(xiàng)目:

npx create-react-app docker-image-test

2)命令執(zhí)行成功后將生成一個(gè)基礎(chǔ)React應(yīng)用程序架構(gòu)。

3)我們可以進(jìn)入項(xiàng)目目錄安裝依賴并運(yùn)行項(xiàng)目:

cd docker-image-test
yarn install
yarn start

4)通過(guò)訪問(wèn)http://localhost:3000可以訪問(wèn)已經(jīng)啟動(dòng)的應(yīng)用程序:

步驟2:構(gòu)建第一個(gè)鏡像

1)在項(xiàng)目的根目錄中創(chuàng)建一個(gè)名為Dockerfile的文件,并粘貼以下代碼:

FROM node:12
WORKDIR /app
COPY package.json ./
RUN yarn install
COPY . .
EXPOSE 3000
CMD ["yarn", "start"]

2)注意,這里我們從Docker倉(cāng)庫(kù)獲得基礎(chǔ)鏡像Node:12,然后安裝依賴項(xiàng)并運(yùn)行基本命令。(我們不會(huì)在這里討論Docker命令的細(xì)節(jié))

3)現(xiàn)在可以通過(guò)終端為容器構(gòu)建鏡像:

docker build -t docker-image-test .

4)Docker構(gòu)建鏡像完成之后,你可以使用此命令查看已經(jīng)構(gòu)建的鏡像:

docker images

在查詢結(jié)果列表的頂部,是我們新創(chuàng)建的圖像,在最右邊,我們可以看到圖像的大小。目前是1.43GB。

5)我們使用以下命令運(yùn)行鏡像:

docker run --rm -it -p 3000:3000/tcp docker-image-test:latest

打開(kāi)瀏覽器并且刷新頁(yè)面驗(yàn)證其可以正常運(yùn)行。

步驟3:修改基礎(chǔ)鏡像

1)先前的配置中我們用node:12作為基礎(chǔ)鏡像。但是傳統(tǒng)的Node鏡像是基于Ubuntu的,對(duì)于我們簡(jiǎn)單的React應(yīng)用程序來(lái)說(shuō)這大可不必。

2)從DockerHub(官方Docker鏡像注冊(cè)表)中我們可以看到,基于alpine-based的Node鏡像比基于Ubuntu的鏡像小得多,而且它們的依賴程度非常低。

3)下面顯示了這些基本圖像的大小比較:

現(xiàn)在我們將使用node:12-alpine作為我們的基礎(chǔ)鏡像,看看會(huì)發(fā)生什么。

FROM node:12-alpine
WORKDIR /app
COPY package.json ./
RUN yarn install
COPY . .
EXPOSE 3000
CMD ["yarn", "start"]

然后我們以此構(gòu)建我們的鏡像,并與之前做對(duì)比。

哇!我們的鏡像大小減少到只有580MB,這是一個(gè)很大的進(jìn)步。但還能做得更好嗎?

步驟4:多級(jí)構(gòu)建

1)在之前的配置中,我們會(huì)將所有源代碼也復(fù)制到工作目錄中。

2)但這大可不必,因?yàn)閺陌l(fā)布和運(yùn)行來(lái)看我們只需要構(gòu)建好的運(yùn)行目錄即可。因此,現(xiàn)在我們將引入多級(jí)構(gòu)建的概念,以減少不必要的代碼和依賴于我們的最終鏡像。

3)配置是這樣的:

# STAGE 1
FROM node:12-alpine AS build

WORKDIR /app
COPY package.json ./
RUN yarn install
COPY . /app
RUN yarn build
# STAGE 2
FROM node:12-alpine
WORKDIR /app
RUN npm install -g webserver.local
COPY --from=build /app/build ./build
EXPOSE 3000
CMD webserver.local -d ./build

4)在第一階段,安裝依賴項(xiàng)并構(gòu)建我們的項(xiàng)目。

5)在第二階段,我們復(fù)制上一階段構(gòu)建產(chǎn)物目錄,并使用它來(lái)運(yùn)行應(yīng)用程序。

6)這樣我們?cè)谧罱K的鏡像中就不會(huì)有不必要的依賴和代碼。

接下來(lái),構(gòu)建鏡像成功后并從列表中查看鏡像:

現(xiàn)在我們的鏡像大小只有97.5MB。這簡(jiǎn)直太棒了。

步驟5:使用Nginx

1)我們正在使用Node服務(wù)器運(yùn)行ReactJS應(yīng)用程序的靜態(tài)資源,但這不是靜態(tài)資源運(yùn)行的最佳選擇。

2)我們嘗試使用Nginx這類更高效、更輕量級(jí)的服務(wù)器來(lái)運(yùn)行資源應(yīng)用程序,也可以盡可能提高其性能,并且減少鏡像的量。

3)我們最終的Docker配置文件看起來(lái)像這樣:

# STAGE 1
FROM node:12-alpine AS build

WORKDIR /app
COPY package.json ./
RUN yarn install
COPY . /app
RUN yarn build
# STAGE 2
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

4)我們正在改變Docker配置的第二階段,以使用Nginx來(lái)服務(wù)我們的應(yīng)用程序。

5)然后使用當(dāng)前配置構(gòu)建鏡像。

6)鏡像大小減少到只有22.4MB!

7)同時(shí),我們正在使用一個(gè)性能更好的服務(wù)器來(lái)服務(wù)我們出色的應(yīng)用程序。

8)我們可以使用以下命令驗(yàn)證應(yīng)用程序是否仍在工作。

docker run --rm -it -p 3000:80/tcp docker-image-test:latest

9)注意,我們將容器的80端口暴露給外部,因?yàn)槟J(rèn)情況下,Nginx將在容器內(nèi)部的80端口上可用。

所以這些是一些簡(jiǎn)單的技巧,你可以應(yīng)用到你的任何NodeJS項(xiàng)目,以大幅減少鏡像大小。

現(xiàn)在,您的容器確實(shí)更加便攜和高效了。

責(zé)任編輯:未麗燕 來(lái)源: dbaplus社群
相關(guān)推薦

2021-08-30 07:08:59

Docker鏡像服務(wù)器

2021-01-26 09:30:58

Docker運(yùn)維命令

2017-02-09 17:30:05

Android應(yīng)用瘦身

2021-12-22 10:45:56

Docker RegiHarborLinux

2021-03-24 10:20:50

Fonts前端代碼

2024-11-13 16:37:00

Java線程池

2020-03-26 11:04:00

Linux命令光標(biāo)

2021-01-18 13:17:04

鴻蒙HarmonyOSAPP

2021-05-12 22:07:43

并發(fā)編排任務(wù)

2022-05-13 21:20:23

組件庫(kù)樣式選擇器

2024-10-31 10:41:01

2024-04-30 10:29:54

Docker存儲(chǔ)C盤(pán)

2021-05-13 23:54:12

DockerDockerfile鏡像

2022-09-16 10:19:36

HarborContainerd

2021-01-28 14:53:19

PHP編碼開(kāi)發(fā)

2022-05-24 06:07:48

JShack用戶代碼

2024-04-24 12:34:08

Spring事務(wù)編程

2022-09-08 11:12:08

6G5G連接技術(shù)

2021-09-08 08:34:37

Go 文檔Goland

2020-10-22 10:15:33

優(yōu)化Windows電腦
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)