Em chào anh ạ. Cho em hỏi là ở đoạn dùng .Dockerignore, anh không gửi folder Node_modules lên thì sao code vẫn chạy được ạ ? Nó lấy các modules ở đâu vậy ạ ?
3 ปีที่แล้ว +1
Vì đó là thư mục thư viện thôi, nên mình để khi nào nó build image nó sẽ run npm install sau, vì folder node modules nó rất là nặng, nên nếu send zô nó sẽ bị chậm ấy vì nó sẽ ko đc cache.
anh cho em hỏi tại sao khi cài môi trường ở nhiều tutorial họ không cài node không mà họ thường cài cùng với một bản phân phối của linux vậy ạ, ví dụ như node-alpine3.10 ....thank anh nhiều.
4 ปีที่แล้ว +5
Thực ra những cái image node alpine là bản nhỏ gọn của node, nó sẽ có ít dependencies hơn, cũng như được tích hợp ít library mặc định hơn. Nên cơ bản node alpine nó sẽ nhỏ gọn hơn, nhanh hơn, bảo mật hơn(ít sự phụ thuộc). Và bản chất trong cái image node luôn có linux nha, node không thì nó sẽ là debian(mình không nhớ lắm), nhưng chắc chắn là luôn có linux ở bên dưới nha. Node thì nó luôn cần một cái OS chạy bên dưới, chứ một mình nó cũng chả làm đc gì, nên khi người ta tạo ra image node thì họ đã cho môi trường OS vào sẵn rồi.
Trường hợp gửi code lên git để docker reload lại code thì làm sao a nhỉ. Với trường hợp mua vps về dùng sao được docker a
4 ปีที่แล้ว +2
Cái này có thể dùng một CI tool ví dụ như là CircleCI, mỗi lần push lên git thì CI nó sẽ tạo ra 1 image mới, sau đó ssh đến vps, rồi run cái image đó. Những thứ dính líu đến data có thể dùng volume, cái container cũ thì stop xong remove nó đi, rồi run bằng cái image mới, volume tới đúng folder data đang sử dụng.
tại sao mình k copy tất cả folder 1 lần luôn vậy anh, mà phải copy package*.json, install rồi mới copy hết vậy anh
3 ปีที่แล้ว +2
Vì có cái gọi là caching layer á e, a copy mỗi package json, install, thì đồng node module sẽ đc cache lại, nếu lần build sau, a ko thay đổi package json thì nó sẽ lấy caid node module trong cache của a, nó khiến build lẹ hơn á
a cho ehỏi với ạ, bây giờ e có 1 ứng dụng chạy trên docker container, khi ứng dụng này chạy xong tạo ra 1 file abc.mp4, giờ e muốn tải về máy local thì làm như thế nào ạ
4 ปีที่แล้ว +1
Cái này cũng có nhiều cách, 1 là em volume cái folder mà em lưu ở trong docker container với 1 folder trên máy local của e. Hoặc là em dùng lệnh copy của docker: docker cp :/file/path/within/container /host/path/target
Có thể nói rõ hơn cho em về cái WORKDIR được ko anh?
4 ปีที่แล้ว +1
WORKDIR giống như kiểu em chỉ ra cái địa chỉ để người ta ship hàng tới vậy :D Nếu không họ sẽ gửi tới bưu cục :D Tất cả những command kiểu RUN, CMD nó sẽ được thực thi tại WORKDIR.
Ông Dev thời buổi nào rồi còn connect xuống host os nữa. Giờ hypervisor nó thành platform luôn rồi. Nó là os luôn rồi. Suy ra cùng cũng chưa biết thằng nào performance tốt hơn thằng nào.
4 ปีที่แล้ว +1
Cường NGUYỄN uh, mình nhầm ở đoạn connect xuống hostos, vì bản thân nó cũng có những features của 1 os, nhưng đơn giản hơn để làm việc với hardware. Hmm, thực ra không có nhiều sự khác biệt giữa 1 os và hypervisor. Tụi nó cũng chỉ là cái software để điều khiển infra thôi. Nhưng nếu so sánh performance thì đối với mình, app trong docker không nhanh hơn app trong VM, nhưng sử dụng docker nó hiểu quả hơn khi nó tốn ít resource hơn so vs VM(chả cần phải assign memory cho container trước khi chạy). Nhưng bù lại thì VM nó lại cung cấp đầy đủ feature của OS. Nên để quyết định sử dụng cái nào trong project thì còn tuỳ thuộc vào thiết kế và yêu cầu của app.
Hi ông dev, mình build khi "switch to Linux containers" thì nó chạy, còn khi switch to Windows containers thì build bị lỗi. Ông dev chỉ cách khắc phục với.
3 ปีที่แล้ว
Cái đó phải xem nó lỗi gì thì mới biết được bạn ơi
Nó bị lỗi ở step 2 đó @Ông Dev . PS E:\DockerWorkSpace\FIRST-DEMO> docker build -t my-node-app:v0.0.1 . Sending build context to Docker daemon 19.97kB Step 1/7 : FROM node:14 14: Pulling from library/node 1e987daa2432: Pull complete a0edb687a3da: Pull complete 6891892cc2ec: Pull complete 684eb726ddc5: Pull complete b0af097f0da6: Pull complete 154aee36a7da: Pull complete 769e77dee537: Pull complete 44a6ee72a664: Pull complete f374f834ba21: Pull complete Digest: sha256:fa48e06848cb619c3dcc6a9c34b13473c89c0ef52b16d275a7ad3d3aef656fd3 Status: Downloaded newer image for node:14 ---> 7bef16bb2cf1 Step 2/7 : WORKDIR /usr/src/app ---> [Warning] The requested image's platform (linux/amd64) does not match the detected h ---> Running in 7c4254d68819 Removing intermediate container 7c4254d68819 ---> b5afd0ef17ae ---> e5d30b30de42 Step 4/7 : RUN npm install ---> [Warning] The requested image's platform (linux/amd64) does not match the detected h ---> Running in 6d8524bcbe28 npm WARN first-demo@1.0.0 No description npm WARN first-demo@1.0.0 No repository field.
3 ปีที่แล้ว
@@vantoanmai5670 à em coi lỗi kìa, em chạy windows container, thì khi run build á, em phải set cái platform nó mới work :v Hoặc là cái image em kéo về nó không tương thích với windows container.
video nói hơi nhỏ, quảng cáo mà chạy lên thì hỏng tai
2 ปีที่แล้ว +1
Cảm ơn bạn đã góp ý. Mình vừa tắt qc giữa video rồi. Đây là kênh mình xót qc giữa video trong video này, chứ còn những video khác sẽ không có qc ở giữa nha
Sr nhưng bác cố gắng giải thích quá nhiều thuật ngữ, đâm ra khá khó hiểu. Cách bác giải thích ko phổ biến được, đúng chỉ những ông nào đã làm qua, đã hiểu sơ, hoặc là dân dev mới hiểu. Nhưng thanks !
3 ปีที่แล้ว
Đúng rồi bạn, vì đối tượng của docker là dev hoặc là devops mà, và khi đã là dev và devops là họ đã có những kiến thức cơ bản rồi, chứ ko có ai tay ngang vào đùng phát học docker đâu :v Cơ mà cũng cảm ơn bạn đã góp ý nha.
phút thứ 10 tại sao lại copy file package*.json vào workDIR trong khi mình sài copy .. để copy toàn bộ source code của mình lên workdir vậy bạn làm vậy có bị dư không mong bạn giải đáp
3 ปีที่แล้ว +2
Trong docker có 1 cái gọi là layers catching, mình làm như này là để kiểu tách các bước build docker image ra, khi đó những thằng không bị thay đổi nó sẽ không tốn thời gian build trong lần build sau, điển hình như node modules folder là rất lớn, nên mình cần tận dụng cache. Cơ bản là chia việc build image ra nhiều bước khác nhau, thì những bước không có thay đổi, nó sẽ bỏ qua.
Nhanh gọn, straight to the point, mình thích :))
mạnh dạn đề xuất ông Dev làm thêm video về docker
Anh ơi video sau anh tăng âm video lên nhé, cảm ơn anh về video rất bổ ích
hay đấy ông 1 thế lực mới trong Vlog IT Việt :)))
Thank ông Dev nhé. Rất dễ hiểu
Cám ơn anh nhe. Rất dễ hiểu
Hay quá a, mà mấy video sau a zoom code to hơn được ko, hơi nhỏ a ơi
Great stuff, thanks bạn 👏
thanks,, dễ hiểu cho newbie
Em chào anh ạ. Cho em hỏi là ở đoạn dùng .Dockerignore, anh không gửi folder Node_modules lên thì sao code vẫn chạy được ạ ? Nó lấy các modules ở đâu vậy ạ ?
Vì đó là thư mục thư viện thôi, nên mình để khi nào nó build image nó sẽ run npm install sau, vì folder node modules nó rất là nặng, nên nếu send zô nó sẽ bị chậm ấy vì nó sẽ ko đc cache.
Ông dev có thể làm 1 vài video về Multi-Thread và Async trong C# được hông nhỉ
Ok nhé :D
anh cho em hỏi tại sao khi cài môi trường ở nhiều tutorial họ không cài node không mà họ thường cài cùng với một bản phân phối của linux vậy ạ, ví dụ như node-alpine3.10 ....thank anh nhiều.
Thực ra những cái image node alpine là bản nhỏ gọn của node, nó sẽ có ít dependencies hơn, cũng như được tích hợp ít library mặc định hơn. Nên cơ bản node alpine nó sẽ nhỏ gọn hơn, nhanh hơn, bảo mật hơn(ít sự phụ thuộc).
Và bản chất trong cái image node luôn có linux nha, node không thì nó sẽ là debian(mình không nhớ lắm), nhưng chắc chắn là luôn có linux ở bên dưới nha.
Node thì nó luôn cần một cái OS chạy bên dưới, chứ một mình nó cũng chả làm đc gì, nên khi người ta tạo ra image node thì họ đã cho môi trường OS vào sẵn rồi.
@ thank anh em hiểu r.
rat hay va de hieu a oi
Trường hợp gửi code lên git để docker reload lại code thì làm sao a nhỉ. Với trường hợp mua vps về dùng sao được docker a
Cái này có thể dùng một CI tool ví dụ như là CircleCI, mỗi lần push lên git thì CI nó sẽ tạo ra 1 image mới, sau đó ssh đến vps, rồi run cái image đó. Những thứ dính líu đến data có thể dùng volume, cái container cũ thì stop xong remove nó đi, rồi run bằng cái image mới, volume tới đúng folder data đang sử dụng.
@ tks a
hè lô ông dev
tại sao mình k copy tất cả folder 1 lần luôn vậy anh, mà phải copy package*.json, install rồi mới copy hết vậy anh
Vì có cái gọi là caching layer á e, a copy mỗi package json, install, thì đồng node module sẽ đc cache lại, nếu lần build sau, a ko thay đổi package json thì nó sẽ lấy caid node module trong cache của a, nó khiến build lẹ hơn á
@ dạ, em cảm ơn anh nhé
bây giờ người ta có dùng docker để run product không anh
Giờ prod người ta chỉ toàn dùng docker thôi :D những ứng dụng lớn thì sẽ dùng k8s + docker
em viết terminal trong visual mà không tạo ra các file như anh, làm thế nào để làm được như anh 6:05
Nhật Acoustic cái command touch nó chỉ có ở bên mac thôi nha, bên windows e có thể dùng echo >> file.blah để tạo file
@ dạ em xài Mac mà làm chưa được
@ em làm được rồi thanks anh
làm video về docker-sync đi bạn :)
a có thể ra video hướng dẫn auto build bằng docker + CI/CD gitlab lên server ko a. thank a!
Anh sẽ có video về CI/CD nhưng dùng CircleCi thay vì Gitlab nha
mong ngóng từng ngày Ông Dev ra video
Em cảm ơn anh nhiều
a cho ehỏi với ạ, bây giờ e có 1 ứng dụng chạy trên docker container, khi ứng dụng này chạy xong tạo ra 1 file abc.mp4, giờ e muốn tải về máy local thì làm như thế nào ạ
Cái này cũng có nhiều cách, 1 là em volume cái folder mà em lưu ở trong docker container với 1 folder trên máy local của e.
Hoặc là em dùng lệnh copy của docker:
docker cp :/file/path/within/container /host/path/target
Có thể nói rõ hơn cho em về cái WORKDIR được ko anh?
WORKDIR giống như kiểu em chỉ ra cái địa chỉ để người ta ship hàng tới vậy :D
Nếu không họ sẽ gửi tới bưu cục :D
Tất cả những command kiểu RUN, CMD nó sẽ được thực thi tại WORKDIR.
docker ps có phải là lệnh mở registry của docker đúng không ông dev?
Docker ps là show list của containers thôi bạn.
Ông Dev thanks anh
Em đã động đến ubutun và phải dùng docker
hay quá a ơi
Vẫn ko biết sao hypervisor lại có host OS. Đâu ra vậy ko biết.
Cường NGUYỄN trong video mình có nói hypervisor có hostOS đâu nhỉ, nó để connect xuống hostos và infra mà.
Ông Dev thời buổi nào rồi còn connect xuống host os nữa. Giờ hypervisor nó thành platform luôn rồi. Nó là os luôn rồi. Suy ra cùng cũng chưa biết thằng nào performance tốt hơn thằng nào.
Cường NGUYỄN uh, mình nhầm ở đoạn connect xuống hostos, vì bản thân nó cũng có những features của 1 os, nhưng đơn giản hơn để làm việc với hardware. Hmm, thực ra không có nhiều sự khác biệt giữa 1 os và hypervisor. Tụi nó cũng chỉ là cái software để điều khiển infra thôi. Nhưng nếu so sánh performance thì đối với mình, app trong docker không nhanh hơn app trong VM, nhưng sử dụng docker nó hiểu quả hơn khi nó tốn ít resource hơn so vs VM(chả cần phải assign memory cho container trước khi chạy). Nhưng bù lại thì VM nó lại cung cấp đầy đủ feature của OS. Nên để quyết định sử dụng cái nào trong project thì còn tuỳ thuộc vào thiết kế và yêu cầu của app.
Hi ông dev, mình build khi "switch to Linux containers" thì nó chạy, còn khi switch to Windows containers thì build bị lỗi. Ông dev chỉ cách khắc phục với.
Cái đó phải xem nó lỗi gì thì mới biết được bạn ơi
Nó bị lỗi ở step 2 đó @Ông Dev .
PS E:\DockerWorkSpace\FIRST-DEMO> docker build -t my-node-app:v0.0.1 .
Sending build context to Docker daemon 19.97kB
Step 1/7 : FROM node:14
14: Pulling from library/node
1e987daa2432: Pull complete
a0edb687a3da: Pull complete
6891892cc2ec: Pull complete
684eb726ddc5: Pull complete
b0af097f0da6: Pull complete
154aee36a7da: Pull complete
769e77dee537: Pull complete
44a6ee72a664: Pull complete
f374f834ba21: Pull complete
Digest: sha256:fa48e06848cb619c3dcc6a9c34b13473c89c0ef52b16d275a7ad3d3aef656fd3
Status: Downloaded newer image for node:14
---> 7bef16bb2cf1
Step 2/7 : WORKDIR /usr/src/app
---> [Warning] The requested image's platform (linux/amd64) does not match the detected h ---> Running in 7c4254d68819
Removing intermediate container 7c4254d68819
---> b5afd0ef17ae
---> e5d30b30de42
Step 4/7 : RUN npm install
---> [Warning] The requested image's platform (linux/amd64) does not match the detected h ---> Running in 6d8524bcbe28
npm WARN first-demo@1.0.0 No description
npm WARN first-demo@1.0.0 No repository field.
@@vantoanmai5670 à em coi lỗi kìa, em chạy windows container, thì khi run build á, em phải set cái platform nó mới work :v
Hoặc là cái image em kéo về nó không tương thích với windows container.
Thanks anh 👍👍
anh cho em hỏi win 10 chạy docker đc không anh.
Windows 10 thì dễ dàng chạy docker hơn bằng Docker Desktop. Còn những bản windows cũ hơn em phải xài Docker Toolbox.
@ thanks anh nha !!!
@ cho e hỏi docker desktop làm sao mở lên cái giao diện ạ e nhấn mà n ko mở dc
Nó chỉ có cái setting là có GUI thôi còn lại thì mình dùng command hết.
@ dạ thanks ad
great, thank pro
Thank u bro.
Thanks guy
Có tinh thần cống hiến, nhưng đọc nhiều từ hơi kì "Image"?
Tiện thể, chủ bài nói "OK, ok, Ok" nhiều quá
ông dev nhớ luyện thêm tiếng anh nha.
ngon
video nói hơi nhỏ, quảng cáo mà chạy lên thì hỏng tai
Cảm ơn bạn đã góp ý. Mình vừa tắt qc giữa video rồi. Đây là kênh mình xót qc giữa video trong video này, chứ còn những video khác sẽ không có qc ở giữa nha
@ dạ, quảng cáo thì hông sao mà video tiếng hơi nhỏ thôi
Sr nhưng bác cố gắng giải thích quá nhiều thuật ngữ, đâm ra khá khó hiểu. Cách bác giải thích ko phổ biến được, đúng chỉ những ông nào đã làm qua, đã hiểu sơ, hoặc là dân dev mới hiểu. Nhưng thanks !
Đúng rồi bạn, vì đối tượng của docker là dev hoặc là devops mà, và khi đã là dev và devops là họ đã có những kiến thức cơ bản rồi, chứ ko có ai tay ngang vào đùng phát học docker đâu :v
Cơ mà cũng cảm ơn bạn đã góp ý nha.
Em build gặp lỗi này "too many levels of symbolic links".,đến dòng WORKDIR /usr/src/app thì nó văng ra lỗi. Anh gặp trường hợp này chưa ạ
Chưa gặp bao giờ luôn, nhưng a nghĩ cái này chắc do lỗi cài đặt @@ github.com/drud/ddev/issues/2227 e check thử
@ Em tìm được lỗi rồi cám ơn anh
phút thứ 10 tại sao lại copy file package*.json vào workDIR trong khi mình sài copy .. để copy toàn bộ source code của mình lên workdir vậy bạn làm vậy có bị dư không mong bạn giải đáp
Trong docker có 1 cái gọi là layers catching, mình làm như này là để kiểu tách các bước build docker image ra, khi đó những thằng không bị thay đổi nó sẽ không tốn thời gian build trong lần build sau, điển hình như node modules folder là rất lớn, nên mình cần tận dụng cache. Cơ bản là chia việc build image ra nhiều bước khác nhau, thì những bước không có thay đổi, nó sẽ bỏ qua.