THẢO LUẬN

hi bạn,

Câu hỏi số 1: image size tăng, 96,69% bạn copy thừa file thôi 😃. Để chứng minh cho bạn thì mình đã trực tiếp thử điều này:

Đầu tiên mình sẽ build + chạy image với non-root user (user node)

FROM node:16-alpine
WORKDIR /app
RUN chown -R node:node /app
USER node
COPY package.json yarn.lock ./
RUN yarn install
COPY --chown=node:node . .
CMD [ "yarn", "start" ]

Kết quả: image size 415Mb, files + folders trong container non-root hết:

Screenshot 2022-11-11 at 10.45.13 AM.pngScreenshot 2022-11-11 at 10.45.33 AM.png

Tiếp đó mình build image với root user:

# build stage
FROM node:16-alpine
WORKDIR /app
# RUN chown -R node:node /app
# USER node
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
CMD [ "yarn", "start" ]

Kết quả: image size 413Mb, files + folders đều của root:

Screenshot 2022-11-11 at 10.47.52 AM.png Screenshot 2022-11-11 at 10.58.04 AM.png

So sánh size của 2 image:

Screenshot 2022-11-11 at 10.48.11 AM.png

Câu số 2: vì sao RUN chown -R appuser:appgroup /app lại lâu, lí do là ví nó sẽ duyệt qua cả node_modules, nên sẽ khá lâu. Cách để fix là bạn có thể đổi qua user appuser:appgroup trước khi chạy npm install, thì như vậy folder node_modules sẽ tự có quyền của appuser:appgroup luôn, và bạn chỉ cẩn chown những file/folder còn lại.

Hướng dẫn cách cải thiện Dockerfile để chown chạy nhanh hơn:

FROM node:16-alpine
WORKDIR /app
# Đổi quyền của cả folder /app về non-root, lúc này folder rỗng nên làm rất nhanh
RUN chown -R node:node /app
USER node
# các commands dưới đây sẽ đều copy hoặc làm sinh ra các files/folders nằm dưới quyền của user node luôn
COPY --chown=node:node package.json yarn.lock ./
# vì ta đang là user node sẵn rồi, nên yarn install sinh ra cả folder node_modules cũng của "node" luôn
RUN yarn install
COPY --chown=node:node . .
CMD [ "yarn", "start" ]
0
thg 11 11, 2022 3:30 SA

mình đang dùng máy win10 để build, cho mình hỏi tí tại sao khi build thêm quyền user size của image lại tăng đột biến?mình đã thử đi thử lại thì vẫn xảy ra vấn đề đó!và 1 vấn đề nữa là chạy RUN chown -R appuser:appgroup /app mất tận 198s lận.giải thích vấn đề này hộ mình với! xin cảm ơn bạn,1 chủ để rất hay!

430MB.png597MB.png 198s.png

0

💪👋💪💪@test2022 yayy, okie e nhé 💪

0
thg 11 10, 2022 2:28 CH

@maitrungduc1410 oke anh Để lúc nào em thử xem sao

+1

Cuối cùng cũng chạy được rồi. Bài viết của anh hay lắm 😃 @maitrungduc1410

+1

Bài viết đỉnh của chóp😃

+2
thg 11 10, 2022 1:29 CH

Ngắn gọn xúc tích dễ hiểu. Cảm ơn bác :3

0
thg 11 10, 2022 12:06 CH

cảm ơn bạn

0
thg 11 10, 2022 11:46 SA

"Async không yêu tự động biến chương trình của ta phải chạy multithread mà có thể chỉ cần sử dụng duy nhất 1 thread"

Tác giả có thể viết thêm chỗ này không. "Khi nào chạy multithread?"

0
thg 11 10, 2022 11:44 SA

"Hàng đợi MicroTask được sử dụng cho các hành động nội bộ rất ngắn cần được chạy không đồng bộ, ngay sau khi thứ khác hoàn thành và trước khi đưa trở lại hàng đợi Sự kiện."

Tác giải có thể minh hoạ bằng code chỗ này không? "hành động nội bộ rất ngắn" "ngay sau khi thứ khác".

0
thg 11 10, 2022 11:41 SA

Khi chạy một ứng dụng Dart, một thread mới được tạo ra và được gọi là Isolate thực hiện các việc như sau:

  1. Tạo Micro task queue và Event queue.
  2. Thực thi phương thức main.
  3. Tạo Event loop.

Câu chữ hơi bị rối, hiểu thế này đúng không tác giả ơi?

0
thg 11 10, 2022 9:54 SA

Mình hiểu là việc gán destination là dựa vào value của destination tại thời điểm gán, chứ destination này không thông đến destination khác. Ở VD2: (2>&1) 2 --> 1 (Mà 1= screen) nên 2 --> screen

0
thg 11 10, 2022 8:56 SA

tks

0

@dungla bạn có cách sửa cho cái này chưa ạ

0
thg 11 10, 2022 8:18 SA

tks

0
thg 11 10, 2022 8:14 SA

tks

0
thg 11 10, 2022 7:20 SA

❤️

0
thg 11 10, 2022 6:44 SA

Có viết là có lên tay(nếu có chăm chút hơn cho content). Chúc bạn thành công!

0
thg 11 10, 2022 5:36 SA

các hạ cẩn thận tẩu hỏa nhập ma

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí