Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)
1. Vì sao nên sử dụng
-
Vào một đêm đẹp trời
trăng thanh gió mát,Bạn được phân bổ vào dự án mới và tất nhiên là hào khí
ngút trời, thế nhưchẻ tre. -
Hứng khởi vào đọc
README.mdmột hồi, thấy dự án này sao mà cài cắm nhiều thứ thế.Nào là Node.js, React, Redis, PostgreSQL, Elasticsearch ... mỗi thứ lại kèm theo yêu cầu version cụ thể.
Lẩm bẩm một hồi, giờ search google, cài cắm một tá thứ này thì hết bao lâu ta ?
Sếp ơi, em cần 1 buổi sáng để setup ạ 💪
- Cài chưa xong đã thấy rối tùm lum, cái nọ xung đột cái kia chẳng hạn, lại còn ảnh hưởng tới những chương trình cũ đã cài đặt trong máy nữa chứ, thôi cài lại luôn cả hệ điều hành cho máy.
Sếp ơi, em cần thêm 1 buổi nữa để setup ạ 🫠🫠🫠
- Thôi xong, mất thời gian, mệt mỏi với những thao tác phụ mà chưa tập trung được vào việc chính.

- Đó chính là lúc bạn nên nghĩ tới
Docker, mọi thứ sẽ đơn giản hơn nhiều.
Chỉ vài dòng lệnh thôi, cạch cạch cạch, bạn sẽ có thể nhanh chóng tạo được
môi trường ảo hóachứa đầy đủ nhữngcài đặtcần thiết để dự án hoạt động.
- Một ví dụ đơn giản vậy thôi nhưng
không dừng lại ở đó, công dụng củaDockercòn khá nhiều, chúng ta cùng tìm hiểu dần nhé !
2. Quá trình hình thành
Trước hết, cùng đọc lịch sử một chút đã:
2.1 Containerlization là gì ?
-
Ngày lâu lâu rồi, mô hình thường được sử dụng là:
Máy chủ vật lý (physical server).Hệ điều hành (operating system, viết tắt là OS).Dự án / phần mềm / ứng dụng (application).
Nôm na là tất cả các phần mềm đều được cài đặt chung hết vào một hệ điều hành và trên một máy tính.

- Vấn đề gặp phải ở đây là lãng phí tài nguyên:
- Một máy chỉ cài được một OS.
- Cho dù có ổ cứng khủng, ram khủng thì cũng không tận dụng hết lợi thế.
-
Sau đó ra đời công nghệ ảo hóa
virtualization.-
Có thể bạn đã nghe tới cái tên Virtualbox hay VMware rồi đúng không, đó đó chính nó đó.
-
Với công nghệ này, trên
một máy chủ vật lýmình có thể cài đặt đượcnhiều OS, tận dụng tài nguyên đã tốt hơn.
-
Ví dụ:
- Bạn đang cài đặt
Ubuntuđể lập trình, sau đó càiVirtualBoxđể có thể:- Cài thêm
Windows- thi thoảng nhớ mùi còn vàolàm trận game. Ubuntuthuộc nhánhDebiannên cài thêmCenOSđể trải nghiệm nhánhRedHat.- Đó, vầy là trên một máy tính, bạn đã cài nhiều hệ điều hành để phục vụ cho những mục đích khác nhau.
- Cài thêm
- Bạn đang cài đặt
-
Nhưng lại nảy sinh vấn đề tiếp:
-
Về tài nguyên:- Khi bạn bật máy ảo trên
VitualBox, bạn cần cấu hình để cung cấp cố định ngay từ đầu tài nguyên từ máy thật cho máy ảo. - Bật máy ảo lên rồi để đó không làm gì thì máy thật cũng không thể tái sử dụng tài nguyên đã cho đi.
- Ví dụ: Khi tạo một
máy ảo ram 2GBtrênmáy thật ram 6GB, lúc này máy thật sẽ chỉ còntối đa 6 - 2 = 4 GB RAM, kể cả khi máy ảo không dùng hết 2GB ram được cấp, đó là một sựlãng phí.
- Khi bạn bật máy ảo trên
-
Về thời gian: Việc khởi động, tắt máy ảo khá lâu, có thể lên tới hàng phút.
-
-
-
Ở bước
tiến hóatiếp theo, người ta sinh ra công nghệcontainerlization:-
Với công nghệ này, trên một máy chủ vật lý, ta sẽ cài đặt được nhiều máy ảo (giống với công nghệ ảo hóa
virtualization) -
Nhưng tốt hơn ở chỗ là các máy con này (Guest OS) đều
dùng chung kernelcủa máy mẹ (Host OS), điều này khác biệt với công nghệ ảo hoá truyền thống vốn chạy Guest OS độc lập vớicác kernel riêng. -
Có thể bạn chưa biết thì
kernel là phần lõi của một hệ điều hành, chịu trách nhiệm quản lý tài nguyên hệ thống như bộ nhớ, CPU, RAM và các thiết bị ngoại vi. Nó hoạt động như một cầu nối giữa phần cứng và phần mềm, điều phối giao tiếp giữa chương trình ứng dụng và phần cứng của máy tính.
-
Có thể hiểu nôm na là khi nào cần tài nguyên thì lấy từ kho tổng, lấy dùng xong trả lại vào kho, rồi khi nào cần thì lại lấy, như vậy việc tận dụng tài nguyên đã tối ưu hơn, không phải chia từ kho tổng ra và cấp phát cố định từ đầu.
-
Điểm nổi bật nhất của
containerlizationlà nó sử dụngcontainer engineđể tạo ra cáccontainer, và một kĩ sư của Google đã phát biểu rằng:
-
Một công ty
hàng đầuvề công nghệ đã áp dụng nó, chứng tỏ lợi ích, độ tin cậy của công nghệ này rồi ! Chúng ta cùngáp dụngnó nhé.
-
2.2 Container là gì ?
-
Trước hết, cần nói về
Container Enginelà một phần mềm sử dụng công nghệcontainerlizationđểđóng góiphần mềm của chúng ta cùng với tất cả phụ thuộc của nó (như thư viện, mã nguồn, cấu hình ...) vào trong một môi trường riêng biệt gọi làcontainer, nó sẽquản lývàvận hànhcác container này đểphần mềmcủa chúng ta có thể chạy ở trong đó. -
Containersẽ chứa tất cả mọi thứ mà phần mềm đó cần để chạy, giữ cho cấu hình phần mềm luôn được nhất quán trên mọi môi trường, từ máy tính cá nhân cho đến máy chủ, VPS, Cloud ... -
Hạn chế tình trạng các lập trình viên đang làm việc trong cùng một team và:
-
Hỏi:
Sao máy anh chạy được mà máy chú thì không ? -
Trả lời:
Có thể do phiên bản MySQL, ở máy của em cài version x.x.x còn máy của a cài verion y.y.y
-
-
Hoặc:
- Hỏi:
Sao code ở local thì chạy mà trên production thì không ? - Trả lời:
Thì lộn cái bàn 🫠🫠🫠

- Hỏi:
-
Ngoài ra, các
tiến trình (process)trong mộtcontainerbị cô lập, tách biệt với các tiến trình của cáccontainerkhác trong cùng hệ thống và cũng tách biệt luôn với môi trườngHost OSbên ngoài. -
Container sẽ
không bị ảnh hưởng từ bên ngoài vàovà cũngkhông gây ảnh hưởng ra ngoàinếu chúng ta không cho phép. Chúng ta chỉ cấu hình để mở một sốcổng giao tiếpnhất định giữa các container với nhau và container vớiHost OS. -
Ví dụ: Cấu hình
container mysqlmở cổng3456và cho phépcontainer java appkết nối tới để lấy dữ liệu trong database.
Ưu điểm:
Tiện lợi:Rất hữu dụng để xây dựng, chuyển giao và chạy các phần mềm, làm mọi thứdễ dàngvànhanh chónghơn.- Ví dụ: bạn có một phần mềm code bằng java, bạn sẽ
không cầncài đặt JDK vào máy thật để chạy phần mềm đó, hoặcnode jsthì cũng không cần càinpm,pythoncũng không cần lên google đi search cách càipython. - Mà chỉ cần dùng container đã được setting tương ứng cho phần mềm đó,
- Tải nó về,
bậtnó lên, cho phần mềmchạybên trong môi trường container đó, vậy là được. - Khi không sài nữa thì
tắt hoặc xóa bỏcontainer đó đi, không ảnh hưởng gì nhiều tớihost OScủa bạn.
- Ví dụ: bạn có một phần mềm code bằng java, bạn sẽ
Linh động: Dễ dàng triển khai hơn do sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng được giảm thiểu.Nhanh: Do chia sẻ host OS nên container có thể được tạo gần như một cách tức thì. Điều này khác với vagrant - tạo môi trường ảo ở level phần cứng nên khi khởi động mất nhiều thời gian hơn.Nhẹ: Container cũng sử dụng chung các images nên cũng không tốn nhiều disks.Đồng nhất: Khi nhiều người cùng phát triển trong một dự án sẽ không bị sự sai khác về mặt môi trường.Đóng gói: Đóng gói tất cả cài đặt cần thiết của dự án, người mới tham gia vào dự án hoặc nhận bàn giao không cần thực hiện setup từng phần nhỏ, nhàm chán và mất thời gian.
Nhược điểm:
Xét về tính an toàn:
- Do dùng chung OS nên nếu có lỗ hổng nào đấy ở kernel của host OS thì nó sẽ ảnh hưởng tới toàn bộ container có trong host OS đấy.
- Ngoài ra hãy thử tưởng tượng với host OS là Linux, nếu trong trường hợp ai đấy hoặc một ứng dụng nào đấy có trong container chiếm được quyền superuser, điều gì sẽ xảy ra? Về lý thuyết thì tầng OS sẽ bị hack và ảnh hưởng trực tiếp tới máy host bị hack cũng như các container khác trong máy đó (hacker sử dụng quyền chiếm được để lấy dữ liệu từ máy host cũng như từ các container khác trong cùng máy host bị hack chẳng hạn).
- Bạn có thể đọc thêm về Docker Security
Sự khác nhau giữa container và VM (virtual machine - máy ảo):
-
VM là một hệ điều hành thực thụ, riêng biệt, chứa nhân hệ điều hành (kernel) và các phần mềm
-> Tách biệt hoàn toàn, tiêu thụ nhiều tài nguyên và thời gian.
-
Container được chia sẻ kernel, nó chỉ như một process, một tiến trình chạy trên máy host os.
-> Nhẹ hơn, nhanh hơn do không có hệ điều hành riêng, do đó linh hoạt hơn. Mức độ cô lập thấp hơn so với VM nhưng vẫn đủ tốt để cô lập môi trường ứng dụng.
2.3 Docker ra đời
-
Công nghệ ảo hóa (
virtualization) thì ta có thể dùng công cụVirtualboxhayVMwarethế còn đối vớicontainerlizationthì dùng gì đây ? Google họ dùng gì ? -
Oh, mình không biết được, mỗi một ông lớn có một cách để áp dụng công nghệ này và họ
private source codecủa họ. Như Google đã tham gia vào cuộc chơi này rất sớm với dự án nội bộ Borg, chính là tiền thân củaKubernetes.
-
Gần đây, mà cũng lâu rồi 😙 Có một công ty tiến hành public source code của họ về công nghệ này, họ tung ra sản phẩm mang tên Docker và nhận được nhiều sự chú ý.
-
Sau đó công ty cũng đổi tên thành Docker luôn, sologan hiện tại là
Develop faster, Run anywhere. Cũng có thể xem đây là hai giá trị lớn nhất mà sản phẩm này mang tới cho cộng đồng, thật ngắn gọn.
Chi tiết hơn sẽ gồm Build, Share, Run, Verify, Test.

-
Công ty này cung cấp công cụ Docker free nhưng họ kiếm được rất nhiều tiền từ những dịch vụ khác đi kèm với nó.

-
Hệ sinh thái nhà Docker cũng có nhiều cái hay ho.

-
Với sự bùng nổ của việc sử dụng
containercùng với những lợi ích lớn mà nó mang lại, gã khổng lồ phần mềmMicrosoftkhông muốn bỏ qua cơ hội màu mỡ này với việc cho ra mắt tính năng mới có tênWindows Container.
Đó, dân ta phải biết sử Tây là thế đó, chứ cứ lao vào học Docker luôn rồi cũng chẳng biết nó sinh đẻ thế nào, từ đâu mà ra, có anh em họ hàng gì không ?
Nhân tiện đa tạ công ty Docker đã đóng góp một phần lớn công sức để công nghệ container hoá không còn là điều xa xỉ mà đã trở thành tiêu chuẩn, giúp cho hàng triệu nhà phát triển và tổ chức có thể dễ dàng tối ưu hoá quy trình làm việc.
3. Cài đặt ra sao ?
-
Dockerhỗ trợLinux,Windowsvà cảMac.-
Lưu ý là
ban đầunó được xây dựng trên nền tảng Linux. Vì Docker cần can thiệp vàophần lõi, phần nhân kernel của OS trong khi đó Linux làmã nguồn mở, gọi là cần gì có nấy. -
Đến khi thấy Docker
hay quá, bác Windowsngỏ lời, thế là công tyDockervà công tyMicrosofthợp tác với nhau nhưng nghe chừngchưa khả quanlắm bởi vì nhân Windows có nhưng thứkhôngpublic được (bản quyền mà, mình đoán thế 😅), Mac OS có lẽ cũng zị =)) -
Cho tới hiện tại khi
càiDocker trênWindowshayMacthì Docker sẽ cài mộtmáy ảo Linuxtrên máy thật và Docker hoạt động dựa trênmáy ảo Linuxđó, còntương laivề sau thì ai biết được. -
Mà cũng do vậy, nên khi dùng
DockertrênMac hoặc Windowsthì hiệu năng sẽ thấp hơn, không tận dụng được toàn bộ sức mạnh củahost os. -
Có lần mình hướng dẫn một bạn sinh viên mới tới công ty thực tập, setup dự án với Docker trên Linux thì chạy khá mượt.
- Thời gian sau bạn cần cài sang Windows để làm luận án và máy cũng bị lỗi gì đó không cài song song Windows với Ubuntu được.
- Thế là phải cài dự án với Docker trên Windows, build cái React rất lâu, trong lúc dev rất lag và khó làm.
- Vốn dĩ cấu hình laptop của bạn ấy cũng không cao sẵn rồi, giờ còn phải share tài nguyên để chạy con máy ảo Linux nữa.
-
3.1 Mac OS
-
Với
Mac OS, thì bạn nên cài đặt Docker Desktop, việc cài đặt cũng khá đơn giản.
-
Docker Desktoplà một ứng dụng có giao diện đồ hoạ (GUI), dành cho các dev muốn dễ dàng chạy Docker trên máy tính cá nhân với đầy đủ công cụ cần thiết trong một trình cài đặt duy nhấtDocker Desktop = Docker Engine (Docker Daemon + Docker CLI) + Docker Extensions + Docker Scout + ...Vào Settings của
Docker Desktopbạn sẽ cấu hình được tài nguyên tối đa của máy ảo Linux mà chúng ta có nhắc tới ở trên.
-
Để kiểm tra xem cài đặt thành công chưa thì bạn chạy câu lệnh
docker run hello-worldNếu xuất hiện dòng chữ
Hello from Docker!như hình bên dưới tức là đã cài đặt thành công.
3.2 Windows
-
Tương tự, bạn nên cài Docker Desktop for Windows
Khác một chút là nếu muốn cấu hình lượng tài nguyên (CPU, RAM, Disk, Swap) tối đa mà Docker được sử dụng thì phải thông qua
wslconfig file
-
Ở khu vực hiển thị dưới cùng bên trái của
Docker Desktop, bạn sẽ nhìn thấy lượngRAM, CPU và DiskmàDockerđang sử dụng bên trong máy ảo Linux.
3.3 Linux
-
Trên Linux, bạn có thể cài song song
Docker DesktopvàDocker Enginevà dùng docker context để chọn dùng cái nào. Tuy nhiên, để tránh xung đột có thể xảy ra thì chỉ nên chọn một trong hai.Docker Desktoptích hợp nhiều công cụ đi kèm,Docker Enginephù hợp cho những người chỉ cần dùng Docker thuần tuý hoặc trên VPS, máy chủ ... -
Với Linux OS, mặc dù trên Linux sẵn rồi nhưng
Docker Desktopsẽ vẫn cài một máy ảo Linux và hoạt động trên đó để quản lý tài nguyên tốt hơn, đảm bảo tính nhất quán trên mọi nền tảng và tách biệt với môi trường Docker sẵn có trên máy trước đó nếu có ... Nên nếu muốn tận dụng hết tối đa sức mạnh Host OS thì khuyến khích càiDocker Enginenha các bạn. -
Hướng dẫn cài đặt cho Docker Engine và Docker Desktop thì trên trang docs cũng khá đầy đủ rồi.
-
Lưu ý là nếu bạn cài và sử dụng
Docker Enginetrực tiếp trên Linux với tài khoản người dùng thông thường mà không dùng sudo thì sẽ gặp lỗiManage Docker as a non-root user-
Thông báo lỗi như sau:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock ... -
Thì
Dockercó chia sẻ về lỗi này tại Linux post-installation steps for Docker EngineThe Docker daemon binds to a Unix socket, not a TCP port. By default it's the root user that owns the Unix socket, and other users can only access it using sudo. The Docker daemon always runs as the root user. -
Lý do là
Docker Engineyêu cầu quyền root để tương tác với hệ thống, vì nó trực tiếp điều khiển các container và cần truy cập các tài nguyên như mạng và hệ thống file. -
Cách xử lý thứ nhất là chạy câu lệnh với quyền
sudo, để cấp quyền cho docker thao tác những việc trên.docker run hello-world # Got permission denied while trying to connect to the Docker daemon socket at unix ... => sudo docker run hello-world # Successfully ! -
Cách xử lý thứ hai là:
If you don't want to preface the docker command with sudo, create a Unix group called docker and add users to it. When the Docker daemon starts, it creates a Unix socket accessible by members of the docker group. On some Linux distributions, the system automatically creates this group when installing Docker Engine using a package manager. In that case, there is no need for you to manually create the group.sudo usermod -aG docker $(whoami) # Thêm user hiện tại vào group docker newgrp docker / reboot / logout and login back # Chọn một trong ba cách: Chạy câu lệnh `newgrp docker` hoặc câu lệnh `reboot` hoặc logout ra rồi login lại để cập nhật sự thay đổi cho group.
-
4. Nhược điểm của Docker
Cũng không nên thần thánh hoá cái gì đó quá =))
-
Hiệu năng trên một số hệ điều hành chưa cao:
- Khi sử dụng Docker trên MacOS hoặc Windows, Docker phải chạy trên một máy ảo Linux để đảm bảo tính tương thích với công nghệ container. Điều này dẫn tới không thể tận dụng tối đa tài nguyên phần cứng đặc biệt trên máy cấu hình thấp.
- Ví dụ, khi build ứng dụng React app, thời gian xử lý trên Docker trên Windows, MacOS có thể chậm hơn nhiều so với khi dùng
Docker Enginetrực tiếp trên Linux.
-
Hạn chế về môi trường container hoá:
-
Docker chỉ hỗ trợ tạo container trên nền Linux (Ubuntu, CentOS, ...) Các ứng dụng yêu cầu môi trường Windows đặc thù sẽ không thể chạy trực tiếp trong contaner Docker.
-
Với
VMwarehoặcVirtualBoxthì khi cài đặt máy ảo, bạn có thể chọn file cài đặt để tạo ra máy ảoWindowshoặcLinuxtuỳ ý đúng không. Nhưng vớiDockerthì ta chỉ có thể tạo ra container Linux, do vậy, phần mềm của bạn sẽ chạy trong môi trường Linux.
-
-
Yêu cầu hiểu biết cơ bản về Linux:
-
Bạn cũng cần nắm được một số kiến thức cơ bản về OS này, các câu lệnh như:
-
ls -la: liệt kê danh sách file trong thư mục -
mkdir: tạo thư mục mới ...
-
-
Để hiểu thêm về hệ điều hành này thì có thể đọc thêm Linux bắt nguồn từ đâu.
-
5. Hoạt động như thế nào ?
Để hiểu luồng hoạt động của Docker, ta có thể tham khảo sơ đồ:

Cơ bản nhất, Docker hoạt động qua 3 bước chính:
- Build: Từ
Dockerfiletạo radocker image. - Run: Từ
docker imagetạo radocker container - Vận hành: Sử dụng
docker containerđể chạy ứng dụng ở bên trong.
Bạn còn nhớ bức ảnh này không, có Build và Run:

5.1 Dockerfile - Khởi đầu của mọi thứ
Dockerfile là một file văn bản chứa các hướng dẫn để Docker biết cách tạo ra docker image theo mong muốn của bạn. Ví dụ:
- Sử dụng hệ điều hành nào (Ubuntu, CentOS)
- Cài đặt các thư viện cần thiết gì (Node.js, Python, ...)
- Sao chép mã nguồn, thiết lập cụ thể chạy ứng dụng như thế nào ...
5.2 Docker Image - Khuôn mẫu của container
-
Docker imagelà sản phẩm được tạo ra từDockerfile, là nền tảng bất biến để khởi chạydocker container. -
Nếu nói với phong cách
lập trình hướng đối tượng, thìdocker imagelàclass, còn docker container làthực thể, instance, thể hiệncủa class đó. -
Nếu so sánh với việc cài đặt Windows, thì
docker imagegiống file.ghođể ghost máy, cho phép xây dựng nhanh hệ điều hành với các cấu hình có sẵn. -
Tuy vậy,
docker imagekhông phải là một file vật lý như file.png,.mp3... có thể copy vào USB, mà nó chỉ tồn tại trong Docker, được lưu trữ và chia sẻ qua Docker Hub -
Cấu trúc của
docker imagegồm nhiều layers (tầng), mỗi tầng ứng với 1 thay đổi như cài thêm thư viện mới, chỉnh sửa file ... Các tầng này được tái sử dụng để giảm dung lượng và tăng tốc độ build.
5.3 Docker container - Môi trường chạy ứng dụng
- Khi chạy
docker image, bạn tạo ra mộtdocker container, đây là môi trường thực tế để ứng dụng hoạt động. - Nếu
docker imagelà bê tông cốt thép bên trong của ngôi nhà thìdocker containerlà ngôi nhà hoàn chỉnh, đã được trát vữa, sơn, lắp thêm nội thất để sẵn sàng sử dụng. - Container là phiên bản động, có thể khởi động, dừng, xoá mà không ảnh hưởng gì đến
docker image. - Như ngôi nhà có thể sơn lại màu sắc ở ngoài cùng còn bên trong cùng bê tông cốt thép thì cố định.
Docker imagelà chuỗi các layers bất biến (no write) xếp chồng, xếp thêm layes (can write) lên trên cùng thì thành container hoạt động.
6. Các câu lệnh trong Docker
-
Chúng ta cần nắm được các câu lệnh để:
-
Một là từ
Dockerfiletạodocker image -
Hai là từ
docker imagedựng lêndocker containerĐó là hai việc cơ bản nhất khi làm với Docker.
Bài cũng đã dài, chúng ta sẽ tìm hiểu phần tạo
docker imagetừDockerfileở phần 2, thay vào đó bây giờ chỉ đơn giản làpull imagevề từDocker Hubvề và sài nhé.
-
-
Các câu lệnh cho
docker image:-
Pull image:
docker pull <image_name>Ví dụ:
docker pull ubuntu:22.04-
ubuntulà tên của image,22.04là tag (version), nếu dùngdocker pull ubuntuthì tag mặc định làlatest -
Khi thực hiện câu lệnh trên, docker sẽ kiểm tra xem image này đã tồn tại trong máy hay chưa, nếu chưa thì từng layer của image sẽ được tải về từ kho lưu trữ Docker Hub.

-
Bạn chạy câu lệnh trên thêm một lần, sẽ thấy không cần tải lại image về nữa.

-
-
Liệt kê danh sách image:
docker images
-
Pull thêm một image mới nữa
docker pull mysqlrồi kiểm tra lại danh sách
docker images

-
-
Xoá image:
docker rmi <image_name>Ví dụ:
docker rmi mysql
- Bạn có thể dùng
Docker Desktopđể kiểm tra dưới dạngGUI:

- Bạn có thể dùng
-
Xoá tất cả images
docker rmi -f $(docker images -aq)
-
-
Các câu lệnh cho
Docker Container-
Bật docker contaner từ docker image:
docker run -it # Hẹn các bạn phần 2 sẽ tìm hiểu kỹ hơn nhé <image_name> # Tên của image mà mình muốn dùng để bật container lên /bin/bash # Tên của Linux shell mà bạn muốn sử dụng (sh, bash, szh ...), cái này cần chút kiến thức về Linux OS để hiểu-
Ví dụ 1:
docker pull ubuntu docker run -it ubuntu /bin/bash
Bây giờ bạn đã dựng thành công một môi trường ubuntu ảo rồi đó:
Bên trong container, bạn có thể thực hiện các câu lệnh với một Linux system như
ls,mkdir...
Ngoài ra, có một câu lệnh khá hay:
uname -aChatGPT xem câu lệnh này dùng để làm gì nhé !

Gõ
uname -aở bên trong container và sau đó ấnCtrl + Cđể thoát ra ngoài máyhost osvà gõuname -atiếp.Nếu bạn dùng
Docker enginetrực tiếp trênLinuxthì sẽ thấy kết quả câu lệnh này ở bên trongcontainervà ở ngoàihost osgiống nhau
Như trường hợp của mình:
Container:
Linux 8fd145beef6a 6.8.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 13 13:35:26 UTC 2024 x86_64 x86_64 x86_64 GNU/LinuxHost OS:
Linux bamboo-Nitro-AN515-51 6.8.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 13 13:35:26 UTC 2024 x86_64 x86_64 x86_64 GNU/LinuxDo
containerđược dùng chung kernel củahost osluôn mà.Nếu bạn dùng
Docker Desktopthì thông tin sẽ là củamáy ảo Linuxđược tạo ra khi càiDocker Desktopmà chúng ta đã nhắc tới trước đó.
Do đó bạn sẽ thấy sự khác biệt giữa hai kết quả.
-
Ví dụ 2:
docker pull mysql docker run -it mysql /bin/bash
Gõ tiếp:
mysql --verison # Kiểm tra mysql versionkết quả là
mysql Ver 9.0.1 for Linux on aarch64 (MySQL Community Server - GPL)Đó, không cần cài mysql vào
host osvà vẫn cómysqlđể dùng rồi.Tương tự, không cần cài Node.js, Python hay Java thủ công từng bước một như xưa nhưng bạn sẽ vẫn có môi trường coding này để sử dụng.
-
-
Liệt kê container:
docker ps # Danh sách containers đang chạy docker ps -a # Danh sách containers đang chạy và đã tắt docker start <container_name> # Khởi động một container docker exec -it <container_name> /bin/bash # Truy cập vào bên trong container đang chạy -
Xoá container:
docker rm -f {container_id/name}: Xóa một container
-
7. Updating ...
-
Phần 1này chủ yếu giới thiệu vềlý thuyết, để mình cùng nhauhiểuDocker là gì và bản chất của Docker đã. -
Trong quá trình viết bài mình cần tìm hiểu thêm nhiều và cũng
nhận ranhiều điều mới. Nếu có ý kiến đóng góp gì, bạn vui lòngcommentbên dưới nhé ! -
Trong phần 2 mình sẽ:
- Cách tạo Dockerfile, đi sâu hơn vào
docker image. - Giải thích chi tiết hơn các câu lệnh (-it nghĩa là gì, /bin/bash nghĩa là gì,..)
- Cách tạo Docker Compose, cấu hình,... Mời các bạn đón đọc.
- Cách tạo Dockerfile, đi sâu hơn vào
Tài liệu tham khảo:
-
http://blog.appconus.com/2016/04/15/docker-cho-nguoi-moi-bat-dau-p1
😊 😊 😊 Thank for your attention 😊 😊 😊
########################################################
Mình đã viết Docker: Chưa biết gì đến biết dùng (Phần 2), mời các bạn đọc tiếp.

All rights reserved