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.md
mộ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óa
chứa đầy đủ nhữngcài đặt
cầ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ủaDocker
cò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
. Ubuntu
thuộc nhánhDebian
nê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 2GB
trê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óa
tiế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 kernel
củ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
containerlization
là 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 đầu
về 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ụng
nó nhé.
-
2.2 Container là gì ?
-
Trước hết, cần nói về
Container Engine
là một phần mềm sử dụng công nghệcontainerlization
đểđóng gói
phầ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ành
các container này đểphần mềm
của chúng ta có thể chạy ở trong đó. -
Container
sẽ 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ộtcontainer
bị cô lập, tách biệt với các tiến trình của cáccontainer
khác trong cùng hệ thống và cũng tách biệt luôn với môi trườngHost OS
bên ngoài. -
Container sẽ
không bị ảnh hưởng từ bên ngoài vào
và cũngkhông gây ảnh hưởng ra ngoài
nế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ếp
nhất định giữa các container với nhau và container vớiHost OS
. -
Ví dụ: Cấu hình
container mysql
mở cổng3456
và cho phépcontainer java app
kế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àng
vànhanh chóng
hơn.- Ví dụ: bạn có một phần mềm code bằng java, bạn sẽ
không cần
cài đặt JDK vào máy thật để chạy phần mềm đó, hoặcnode js
thì cũng không cần càinpm
,python
cũ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ật
nó lên, cho phần mềmchạy
bê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 OS
củ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ụVirtualbox
hayVMware
thế còn đối vớicontainerlization
thì 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 code
củ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
container
cùng với những lợi ích lớn mà nó mang lại, gã khổng lồ phần mềmMicrosoft
khô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 ?
-
Docker
hỗ trợLinux
,Windows
và cảMac
.-
Lưu ý là
ban đầu
nó đượ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 tyDocker
và công tyMicrosoft
hợp tác với nhau nhưng nghe chừngchưa khả quan
lắm bởi vì nhân Windows có nhưng thứkhông
public đượ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ài
Docker trênWindows
hayMac
thì Docker sẽ cài mộtmáy ảo Linux
trên máy thật và Docker hoạt động dựa trênmáy ảo Linux
đó, còntương lai
về sau thì ai biết được. -
Mà cũng do vậy, nên khi dùng
Docker
trênMac hoặc Windows
thì 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 Desktop
là 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 Desktop
bạ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-world
Nế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à Disk
mà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 Desktop
vàDocker Engine
và 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 Desktop
tích hợp nhiều công cụ đi kèm,Docker Engine
phù 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 Desktop
sẽ 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 Engine
nha 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 Engine
trự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ì
Docker
có 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 Engine
yê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 Engine
trự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
VMware
hoặcVirtualBox
thì khi cài đặt máy ảo, bạn có thể chọn file cài đặt để tạo ra máy ảoWindows
hoặcLinux
tuỳ ý đúng không. Nhưng vớiDocker
thì 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ừ
Dockerfile
tạo radocker image
. - Run: Từ
docker image
tạ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 image
là 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 image
làclass
, còn docker container làthực thể, instance, thể hiện
của class đó. -
Nếu so sánh với việc cài đặt Windows, thì
docker image
giố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 image
khô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 image
gồ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 image
là bê tông cốt thép bên trong của ngôi nhà thìdocker container
là 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 image
là 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ừ
Dockerfile
tạodocker image
-
Hai là từ
docker image
dự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 image
từDockerfile
ở phần 2, thay vào đó bây giờ chỉ đơn giản làpull image
về từDocker Hub
về 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
-
ubuntu
là tên của image,22.04
là tag (version), nếu dùngdocker pull ubuntu
thì 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 mysql
rồ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 -a
ChatGPT 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 os
và gõuname -a
tiếp.Nếu bạn dùng
Docker engine
trực tiếp trênLinux
thì sẽ thấy kết quả câu lệnh này ở bên trongcontainer
và ở ngoàihost os
giống nhauNhư 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/Linux
Host 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/Linux
Do
container
được dùng chung kernel củahost os
luôn mà.Nếu bạn dùng
Docker Desktop
thì thông tin sẽ là củamáy ảo Linux
được tạo ra khi càiDocker Desktop
mà 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 version
kế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 os
và 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 1
này chủ yếu giới thiệu vềlý thuyết
, để mình cùng nhauhiểu
Docker 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 ra
nhiều điều mới. Nếu có ý kiến đóng góp gì, bạn vui lòngcomment
bê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
Bình luận