DOCKER? DỄ ẤY MÀ #1 | CƠ BẢN | TodayILearned

Поделиться
HTML-код
  • Опубликовано: 26 июл 2019
  • Hế lô hế lô, Ông dev đây!
    Trong phần này mình sẽ nói về Docker.
    Tóm tắt:
    - So sánh Virtual machines và Docker containers
    + Virtual machines:
    * VM sẽ chạy trên Kernel riêng của GuestOS sử dụng Hypervisor
    * VM cung cấp nhiều thứ hơn những gì ứng dụng chúng ta cần
    + Docker containers:
    * Sử dụng kernel của Host OS
    * Chỉ cung cấp thứ mà ứng dụng cần
    * Dễ dàng scale
    - Tác dụng của Docker:
    + Giữ môi trường đồng nhất trên tất cả các máy sử dụng
    + Khi đã có image rồi, chỉ cần chạy nó thôi :D Không cần cài đặt thêm gì cả. Điều này khiến cho người mới vào dự án dễ dàng set up hệ thống.
    + Tốc độ cao hơn VM(giảm từ phút khởi chạy đến mili giây)
    - Điều cần nắm trong Docker:
    + Image: executable package chứa tất cả mọi thứ liên quan đến ứng dụng(nền tảng, code, thư viện, biến môi trường, cài đặt)
    + Container: là một runtime instance của image, nghĩa là image chạy lên nó sẽ ra 1 container
    + Dockerfile: đây là một file text nơi bạn sẽ cài đặt mọi thứ liên quan đến cái image của mình
    - Quy trình sử dụng Docker cơ bản:
    + Tạo Dockerfile
    + Từ Dockerfile build ra image
    + Chạy image sẽ có container
    - Các lệnh thường dùng(kí tự '' chỉ là trích dẫn):
    + docker build -t 'image-tag' 'địa chỉ của build context(là nơi chứa Dockerfile)'
    + docker run -p 'host port':'docker port' 'image-tag'
    + docker ps dùng để xem danh sách container
    + docker images dùng để xem danh sách image
    **** Phần tiếp theo mình sẽ nói về Docker compose, sẽ kết hợp các service lại với nhau!
    Link của cả playlist Today i learned:
    • TIL (Today I Learned)
    -- Để xem những video về lập trình và gaming --
    Nhấn vào đây để theo dõi kênh mình nhé: duyngd.com/Subscribe
    -- Blog của mình --
    duyngd.com
    -- Facebook page của mình --
    / ongdevvuitinh
    -- Ủng hộ Ông Dev --
    Cảm ơn các bạn đã quan tâm theo dõi
    #todayilearned #ôngdev #docker

Комментарии • 77

  • @tuanhungluong5155
    @tuanhungluong5155 4 года назад +1

    mạnh dạn đề xuất ông Dev làm thêm video về docker

  • @phamat5571
    @phamat5571 3 года назад +2

    Thank ông Dev nhé. Rất dễ hiểu

  •  7 месяцев назад

    Nhanh gọn, straight to the point, mình thích :))

  •  3 года назад +3

    hay đấy ông 1 thế lực mới trong Vlog IT Việt :)))

  • @howtoprogram5909
    @howtoprogram5909 3 года назад +3

    Anh ơi video sau anh tăng âm video lên nhé, cảm ơn anh về video rất bổ ích

  • @tonchoithethao9665
    @tonchoithethao9665 3 года назад +1

    Cám ơn anh nhe. Rất dễ hiểu

  • @ngocducgis
    @ngocducgis 4 года назад +1

    Great stuff, thanks bạn 👏

  • @schoolXedu
    @schoolXedu 3 года назад

    hay quá a ơi

  • @r4pt0r20
    @r4pt0r20 4 года назад +2

    Hay quá a, mà mấy video sau a zoom code to hơn được ko, hơi nhỏ a ơi

  • @AnhNgoc-mw9cf
    @AnhNgoc-mw9cf 2 года назад

    rat hay va de hieu a oi

  • @PhongNguyen-tp7lg
    @PhongNguyen-tp7lg 2 года назад

    thanks,, dễ hiểu cho newbie

  • @vuhoang2131
    @vuhoang2131 3 года назад

    hè lô ông dev

  • @izclubcom
    @izclubcom 3 года назад +1

    làm video về docker-sync đi bạn :)

  • @thiquang37
    @thiquang37 8 месяцев назад

    Em cảm ơn anh nhiều

  • @nguyenhoa7759
    @nguyenhoa7759 3 года назад

    Thanks anh 👍👍

  • @hungnm1208
    @hungnm1208 4 года назад

    great, thank pro

  • @mindset5228
    @mindset5228 4 года назад

    Em đã động đến ubutun và phải dùng docker

  • @manhngo2724
    @manhngo2724 4 года назад

    Thank u bro.

  • @baudeejay8592
    @baudeejay8592 3 года назад

    Thanks guy

  • @Mainguyenish
    @Mainguyenish 4 года назад

    ngon

  • @NTC11111
    @NTC11111 5 лет назад +3

    Ông dev có thể làm 1 vài video về Multi-Thread và Async trong C# được hông nhỉ

    •  5 лет назад +1

      Ok nhé :D

  • @_coolbom
    @_coolbom 3 года назад +1

    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.

  • @hieule1022
    @hieule1022 4 года назад +1

    a có thể ra video hướng dẫn auto build bằng docker + CI/CD gitlab lên server ko a. thank a!

    •  4 года назад +4

      Anh sẽ có video về CI/CD nhưng dùng CircleCi thay vì Gitlab nha

    • @quanghieutruong272
      @quanghieutruong272 4 года назад

      mong ngóng từng ngày ​ Ông Dev ra video

  • @minhhieple6483
    @minhhieple6483 4 года назад +2

    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.

    • @minhhieple6483
      @minhhieple6483 4 года назад

      @ thank anh em hiểu r.

  • @musiclove2109
    @musiclove2109 3 года назад

    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 ạ

    •  3 года назад +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

  • @tringuyencaothien2412
    @tringuyencaothien2412 3 года назад

    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.

  • @PhucHoang-qw8hg
    @PhucHoang-qw8hg 4 года назад +1

    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.

    • @PhucHoang-qw8hg
      @PhucHoang-qw8hg 4 года назад

      @ tks a

  • @12a4tv
    @12a4tv 4 года назад +1

    bây giờ người ta có dùng docker để run product không anh

    •  4 года назад

      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

  • @toannc90
    @toannc90 3 года назад

    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á

  • @HieuTran-od9zn
    @HieuTran-od9zn 3 года назад

    Có thể nói rõ hơn cho em về cái WORKDIR được ko anh?

    •  3 года назад +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.

  • @Andy-wv2xj
    @Andy-wv2xj 3 года назад

    ông dev nhớ luyện thêm tiếng anh nha.

  • @ienngongoc3209
    @ienngongoc3209 2 года назад +1

    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

    •  2 года назад +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 á

    • @ienngongoc3209
      @ienngongoc3209 2 года назад

      @ dạ, em cảm ơn anh nhé

  • @NhatNguyen-yz5tm
    @NhatNguyen-yz5tm 3 года назад

    docker ps có phải là lệnh mở registry của docker đúng không ông dev?

    •  3 года назад +1

      Docker ps là show list của containers thôi bạn.

    • @NhatNguyen-yz5tm
      @NhatNguyen-yz5tm 3 года назад

      Ông Dev thanks anh

  • @nhatacoustic3633
    @nhatacoustic3633 4 года назад

    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

    •  4 года назад +1

      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

    • @nhatacoustic3633
      @nhatacoustic3633 4 года назад

      @ dạ em xài Mac mà làm chưa được

    • @nhatacoustic3633
      @nhatacoustic3633 4 года назад

      @ em làm được rồi thanks anh

  • @vantoanmai5670
    @vantoanmai5670 3 года назад

    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

    • @vantoanmai5670
      @vantoanmai5670 3 года назад

      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.

  • @CuongNGUYEN-is8rf
    @CuongNGUYEN-is8rf 4 года назад

    Vẫn ko biết sao hypervisor lại có host OS. Đâu ra vậy ko biết.

    •  4 года назад

      Cường NGUYỄN trong video mình có nói hypervisor có hostOS đâu nhỉ, nó để connect xuống hostos và infra mà.

    • @CuongNGUYEN-is8rf
      @CuongNGUYEN-is8rf 4 года назад +1

      Ô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.

  • @tech.talk69
    @tech.talk69 4 года назад

    anh cho em hỏi win 10 chạy docker đc không anh.

    •  4 года назад +1

      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.

    • @tech.talk69
      @tech.talk69 4 года назад

      @ thanks anh nha !!!

    • @congthanghuynh5908
      @congthanghuynh5908 4 года назад

      @ 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

    •  4 года назад

      Nó chỉ có cái setting là có GUI thôi còn lại thì mình dùng command hết.

    • @congthanghuynh5908
      @congthanghuynh5908 4 года назад

      @ dạ thanks ad

  • @kj1304
    @kj1304 2 года назад

    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

    • @kj1304
      @kj1304 2 года назад

      @ dạ, quảng cáo thì hông sao mà video tiếng hơi nhỏ thôi

  • @haile1512
    @haile1512 2 года назад

    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 !

    •  2 года назад

      Đú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.

  • @besaungungok
    @besaungungok 3 года назад

    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 ạ

    •  3 года назад +1

      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ử

    • @besaungungok
      @besaungungok 3 года назад

      @ Em tìm được lỗi rồi cám ơn anh