Docker Hello World: Bắt đầu và xác minh mọi thứ hoạt động
Chạy docker run hello-world là cách nhanh nhất để xác nhận cài đặt Docker của bạn hoạt động đúng, hiểu điều gì xảy ra khi thực thi một container và khắc phục sự cố thiết lập thường gặp trước khi xây ứng dụng thực tế.
Bạn đã chạy trình cài đặt, bấm qua các bước thiết lập và Docker báo đã sẵn sàng. Nhưng làm sao biết chắc? Hầu hết hướng dẫn Docker trên mạng đều giả định bạn đã xác minh xong thiết lập, nhưng không ai chỉ bạn cách thực hiện bước xác minh đó.
Tin tốt là Docker cung cấp một image kiểm thử tích hợp sẵn tên là hello-world để xác nhận mọi thứ đang hoạt động. Bạn chỉ cần chạy một lệnh để nhận phản hồi tức thì nếu Docker được cấu hình đúng.
Trong bài viết này, tôi sẽ cho bạn biết image hello-world làm gì, cách chạy, ý nghĩa phần xuất ra, và cách khắc phục các vấn đề thường gặp khi xảy ra lỗi.
Sau khi chạy ví dụ Hello World, bạn sẵn sàng học những điều cơ bản về Docker. Khóa học Giới thiệu về Docker của chúng tôi sẽ giúp bạn bắt đầu chỉ trong một buổi chiều.
Docker Hello World là gì?
Image hello-world là công cụ chẩn đoán chính thức của Docker để kiểm thử cài đặt của bạn.
Docker duy trì image này như một container nhỏ nhất có thể để chứng minh Docker đang hoạt động. Đó là một chương trình thực thi tí hon in ra thông báo xác nhận rồi thoát. Hết.
Docker cung cấp hello-world vì người dùng mới cần cách nhanh để xác minh ba điều:
Docker được cài đặt đúng trên hệ thống của bạn
Bạn có quyền cần thiết để chạy các lệnh Docker
Docker daemon có thể truy cập và phản hồi yêu cầu
Hãy coi nó như khi chạy python --version sau khi cài Python. Bạn chỉ đang xác nhận công cụ đã sẵn sàng sử dụng - chưa phải xây dựng gì cả.
Kiểm tra xem image có tồn tại cục bộ không. Docker tìm trong bộ đệm image cục bộ để xem bạn đã tải hello-world trước đó chưa. Nếu có, Docker bỏ qua bước tải và chạy luôn.
Nếu không tìm thấy cục bộ, Docker sẽ kéo image từ Docker Hub. Docker Hub là registry mặc định nơi Docker lưu các image chính thức. Image hello-world rất nhỏ - chỉ vài kilobyte, nên tải xuống rất nhanh.
Sau khi có image, Docker tạo và chạy một container từ image đó. Container thực thi chương trình tích hợp sẵn, in thông báo xác nhận rồi thoát.
Điều gì xảy ra khi bạn chạy Docker Hello World?
Dưới đây là luồng từng bước khi bạn chạy docker run hello-world.
Trước tiên, Docker kiểm tra image có sẵn cục bộ không. Nó tìm trong bộ đệm image cục bộ để xem bạn đã tải hello-world chưa. Nếu có, Docker chuyển sang bước tiếp theo. Nếu không, Docker kết nối Docker Hub và kéo image về.
Tiếp theo, Docker tạo một container từ image. Image giống như một khuôn mẫu - chứa chương trình và mọi thứ cần để chạy. Container là thể hiện đang chạy thực tế của khuôn mẫu đó.
Container chạy chương trình của nó, in thông báo xác nhận ra terminal của bạn. Thông báo này giải thích những gì Docker vừa làm và xác nhận mọi thứ đang hoạt động.
Cuối cùng, container thoát. Chương trình hello-world không được thiết kế để chạy liên tục. Nó in thông báo rồi dừng ngay. Container vẫn tồn tại trên hệ thống của bạn nhưng ở trạng thái dừng.
Toàn bộ quá trình này diễn ra tự động khi bạn chạy lệnh; bạn không cần tự quản lý bước nào cả.
Hiểu phần xuất ra của Docker Hello World
Khi hello-world chạy thành công, bạn sẽ thấy một thông điệp nhiều dòng giải thích những gì vừa xảy ra.
Phần xuất ra của docker run hello-world
Phần xuất ra bắt đầu bằng xác nhận rằng Docker không tìm thấy image cục bộ nên đã kéo từ Docker Hub. Bạn sẽ thấy dạng như "Unable to find image 'hello-world:latest' locally" kèm các thanh tiến trình tải.
Tiếp theo là thông điệp chính xác nhận Docker hoạt động đúng. Thông điệp dẫn bạn qua các bước Docker đã thực hiện. Nó giải thích rằng Docker daemon đã kéo image, tạo container từ image đó, chạy chương trình thực thi bên trong và truyền phần xuất ra tới terminal của bạn.
Thông điệp cũng gợi ý các bước tiếp theo bạn có thể thử. Nó đề xuất chạy một container tương tác hơn như Ubuntu, vốn duy trì trạng thái chạy và cho phép bạn thực thi lệnh bên trong. Điều này giúp bạn hiểu sự khác biệt giữa container kiểm thử một lần và các container thực tế bạn sẽ dùng cho phát triển.
Cuối cùng, bạn sẽ thấy container thoát. Chương trình hello-world được thiết kế để in thông điệp rồi dừng ngay - không phải dịch vụ hay ứng dụng chạy nền. Nhiệm vụ của container kết thúc khi xác nhận Docker hoạt động.
Nếu bạn thấy toàn bộ phần xuất ra này mà không có lỗi, cài đặt Docker của bạn đang hoạt động đúng và bạn đã sẵn sàng chạy các container thực sự.
Vấn đề thường gặp khi chạy Docker Hello World
Ngay cả một bài kiểm thử đơn giản như hello-world cũng có thể thất bại nếu Docker không được thiết lập đúng. Dưới đây là các vấn đề thường gặp và cách khắc phục.
Không tìm thấy lệnh Docker
Nếu bạn thấy "docker: command not found" hoặc "docker is not recognized," thì Docker chưa được cài hoặc chưa có trong PATH của hệ thống.
Nếu lệnh trên không trả về gì, bạn cần cài Docker. Trên macOS và Windows, đảm bảo Docker Desktop đã được cài và đang chạy.
Lỗi từ chối quyền
Bạn có thể thấy "permission denied while trying to connect to the Docker daemon socket."
Điều này xảy ra khi tài khoản người dùng của bạn không có quyền truy cập Docker. Trên Linux, bạn cần chạy Docker với sudo hoặc thêm người dùng của bạn vào nhóm docker:
Trên macOS và Windows, mở Docker Desktop. Daemon sẽ tự khởi động khi ứng dụng chạy. Bạn sẽ thấy biểu tượng Docker trên khay hệ thống khi đã sẵn sàng.
Sự cố mạng khi kéo image
Đôi khi Docker không tải được image hello-world từ Docker Hub. Bạn sẽ thấy lỗi không thể kéo hoặc quá thời gian kết nối.
Trước tiên, hãy kiểm tra kết nối internet của bạn. Nếu bạn ở sau tường lửa hoặc proxy của doanh nghiệp, có thể cần cấu hình Docker để sử dụng nó. Trên Linux, cấu hình trong /etc/systemd/system/docker.service.d/http-proxy.conf. Trên Docker Desktop, bạn có thể đặt proxy trong Settings.
Nếu các cách này không hiệu quả, thông báo lỗi thường chỉ dẫn bạn đúng hướng - hãy đọc kỹ.
Làm gì sau Docker Hello World
Giờ đây bạn đã xác nhận Docker hoạt động, dưới đây là hướng đi tiếp theo.
Chạy một container thực thụ với shell tương tác. Hãy thử kéo và chạy một container Ubuntu:
Các cờ -it cung cấp một terminal tương tác bên trong container. Bạn có thể chạy lệnh, cài gói và khám phá cách container hoạt động. Gõ exit để thoát khỏi container.
Khám phá các image có sẵn trên Docker Hub. Bạn sẽ tìm thấy image chính thức cho các cơ sở dữ liệu như PostgreSQL và MySQL, ngôn ngữ lập trình như Python và Node.js, và các công cụ như Redis và Nginx. Duyệt tại hub.docker.com hoặc tìm trực tiếp từ dòng lệnh:
Tự xây image với Dockerfile. Bắt đầu đơn giản: Tạo một tệp tên Dockerfile để sao chép mã ứng dụng của bạn vào container và định nghĩa cách chạy nó. Ngay cả một Dockerfile cơ bản với vài dòng cũng sẽ dạy bạn cách image được xây từ các hướng dẫn.
Kết luận
Lệnh docker run hello-world làm tốt một việc: Chứng minh cài đặt Docker của bạn hoạt động.
Đây không phải ứng dụng thực sự. Nó sẽ không dạy bạn cách xây container hay triển khai dịch vụ production. Nhưng nó sẽ giúp bạn yên tâm rằng cài đặt Docker của mình không có vấn đề.
Nếu hello-world chạy không lỗi và in thông báo xác nhận, môi trường Docker của bạn đã được thiết lập đúng và bạn sẵn sàng làm việc với các container thực sự.
Vậy tiếp theo là gì? Hãy tham gia khóa Giới thiệu về Docker của chúng tôi. Khóa học sẽ cho bạn nền tảng cần thiết để làm việc trong nhóm. Sau đó, xây dựng thứ gì hữu ích bằng cách theo dõi bài viết 10 ý tưởng dự án Docker của chúng tôi.
Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.
FAQs
Làm sao tôi tối ưu kích thước Docker image?⌄
Bắt đầu với các image nền tảng nhỏ như Alpine Linux thay vì image Ubuntu hoặc Debian đầy đủ. Dùng multi-stage build để tách phụ thuộc cho giai đoạn build khỏi phụ thuộc cho giai đoạn chạy - cách này giúp image cuối gọn hơn bằng cách loại bỏ compiler và công cụ build. Ngoài ra, kết hợp các lệnh RUN trong Dockerfile để giảm số lớp, và dùng .dockerignore để ngăn các tệp không cần thiết bị sao chép vào image.
Thực tiễn tốt nhất khi dùng Docker trong môi trường production là gì?⌄
Không bao giờ chạy container với quyền root - hãy tạo một người dùng không phải root trong Dockerfile và chuyển sang người dùng đó. Dùng thẻ image cụ thể thay vì latest để đảm bảo triển khai nhất quán giữa các môi trường. Đặt giới hạn tài nguyên (CPU và bộ nhớ) cho container để ngăn một container dùng hết tài nguyên máy chủ. Health check cũng quan trọng - định nghĩa chúng trong Dockerfile để công cụ điều phối có thể phát hiện và khởi động lại container không khỏe.
Làm thế nào tích hợp Docker với pipeline CI/CD?⌄
Hầu hết nền tảng CI/CD như GitHub Actions, GitLab CI và Jenkins đều hỗ trợ Docker tích hợp. Thông thường, bạn sẽ build Docker image như một phần của pipeline, gắn thẻ bằng SHA commit hoặc số phiên bản, đẩy lên một container registry như Docker Hub hoặc AWS ECR, rồi triển khai vào môi trường của bạn. Mấu chốt là tự động hóa quy trình build-tag-push-deploy để mỗi thay đổi mã sinh ra một image container đã được kiểm thử và gắn phiên bản.
Lợi ích của việc dùng multi-stage build trong Docker là gì?⌄
Multi-stage build cho phép bạn dùng một bộ công cụ để build ứng dụng và một bộ nhỏ hơn để chạy. Ví dụ, bạn có thể biên dịch ứng dụng Go ở một stage có trình biên dịch Go, sau đó chỉ sao chép binary đã biên dịch vào image Alpine tối giản cho stage cuối. Cách này giảm mạnh kích thước image - một ứng dụng biên dịch có thể cần 1GB công cụ build nhưng chỉ 20MB để chạy. Image nhỏ hơn đồng nghĩa triển khai nhanh hơn và chi phí lưu trữ thấp hơn.
Làm sao đảm bảo container Docker của tôi chạy an toàn?⌄
Quét các image để tìm lỗ hổng bằng công cụ như Docker Scout hoặc Trivy trước khi triển khai. Không lưu trữ bí mật trong Dockerfile hoặc biến môi trường - hãy dùng Docker secrets hoặc công cụ quản lý bí mật bên ngoài. Giữ image nền tảng được cập nhật để nhận bản vá bảo mật, và giới hạn khả năng của container bằng cờ --cap-drop để loại bỏ các khả năng Linux không cần thiết. Ngoài ra, hãy dùng hệ thống tệp chỉ-đọc khi có thể và không bao giờ phơi bày Docker socket bên trong container trừ khi thực sự cần thiết.
Tìm hiểu về Docker và khám phá tầm quan trọng của nó trong bộ công cụ của chuyên gia dữ liệu. Tìm hiểu về Docker container, Docker image và nhiều nội dung khác.
Bạn đã chạy trình cài đặt, bấm qua các bước thiết lập và Docker báo đã sẵn sàng. Nhưng làm sao biết chắc? Hầu hết hướng dẫn Docker trên mạng đều giả định bạn đã xác minh xong thiết lập, nhưng không ai chỉ bạn cách thực hiện bước xác minh đó.
Tin tốt là Docker cung cấp một image kiểm thử tích hợp sẵn tên là
hello-worldđể xác nhận mọi thứ đang hoạt động. Bạn chỉ cần chạy một lệnh để nhận phản hồi tức thì nếu Docker được cấu hình đúng.Trong bài viết này, tôi sẽ cho bạn biết image
hello-worldlàm gì, cách chạy, ý nghĩa phần xuất ra, và cách khắc phục các vấn đề thường gặp khi xảy ra lỗi.Sau khi chạy ví dụ Hello World, bạn sẵn sàng học những điều cơ bản về Docker. Khóa học Giới thiệu về Docker của chúng tôi sẽ giúp bạn bắt đầu chỉ trong một buổi chiều.
Docker Hello World là gì?
Image
hello-worldlà công cụ chẩn đoán chính thức của Docker để kiểm thử cài đặt của bạn.Docker duy trì image này như một container nhỏ nhất có thể để chứng minh Docker đang hoạt động. Đó là một chương trình thực thi tí hon in ra thông báo xác nhận rồi thoát. Hết.
Docker cung cấp
hello-worldvì người dùng mới cần cách nhanh để xác minh ba điều:Hãy coi nó như khi chạy
python --versionsau khi cài Python. Bạn chỉ đang xác nhận công cụ đã sẵn sàng sử dụng - chưa phải xây dựng gì cả.Cách chạy Docker Hello World
Chạy image
hello-worldchỉ cần một lệnh.Khi bạn chạy lệnh này, Docker làm hai việc:
Kiểm tra xem image có tồn tại cục bộ không. Docker tìm trong bộ đệm image cục bộ để xem bạn đã tải
hello-worldtrước đó chưa. Nếu có, Docker bỏ qua bước tải và chạy luôn.Nếu không tìm thấy cục bộ, Docker sẽ kéo image từ Docker Hub. Docker Hub là registry mặc định nơi Docker lưu các image chính thức. Image
hello-worldrất nhỏ - chỉ vài kilobyte, nên tải xuống rất nhanh.Sau khi có image, Docker tạo và chạy một container từ image đó. Container thực thi chương trình tích hợp sẵn, in thông báo xác nhận rồi thoát.
Điều gì xảy ra khi bạn chạy Docker Hello World?
Dưới đây là luồng từng bước khi bạn chạy
docker run hello-world.Trước tiên, Docker kiểm tra image có sẵn cục bộ không. Nó tìm trong bộ đệm image cục bộ để xem bạn đã tải
hello-worldchưa. Nếu có, Docker chuyển sang bước tiếp theo. Nếu không, Docker kết nối Docker Hub và kéo image về.Tiếp theo, Docker tạo một container từ image. Image giống như một khuôn mẫu - chứa chương trình và mọi thứ cần để chạy. Container là thể hiện đang chạy thực tế của khuôn mẫu đó.
Container chạy chương trình của nó, in thông báo xác nhận ra terminal của bạn. Thông báo này giải thích những gì Docker vừa làm và xác nhận mọi thứ đang hoạt động.
Cuối cùng, container thoát. Chương trình
hello-worldkhông được thiết kế để chạy liên tục. Nó in thông báo rồi dừng ngay. Container vẫn tồn tại trên hệ thống của bạn nhưng ở trạng thái dừng.Toàn bộ quá trình này diễn ra tự động khi bạn chạy lệnh; bạn không cần tự quản lý bước nào cả.
Hiểu phần xuất ra của Docker Hello World
Khi
hello-worldchạy thành công, bạn sẽ thấy một thông điệp nhiều dòng giải thích những gì vừa xảy ra.Phần xuất ra của docker run hello-world
Phần xuất ra bắt đầu bằng xác nhận rằng Docker không tìm thấy image cục bộ nên đã kéo từ Docker Hub. Bạn sẽ thấy dạng như "Unable to find image 'hello-world:latest' locally" kèm các thanh tiến trình tải.
Tiếp theo là thông điệp chính xác nhận Docker hoạt động đúng. Thông điệp dẫn bạn qua các bước Docker đã thực hiện. Nó giải thích rằng Docker daemon đã kéo image, tạo container từ image đó, chạy chương trình thực thi bên trong và truyền phần xuất ra tới terminal của bạn.
Thông điệp cũng gợi ý các bước tiếp theo bạn có thể thử. Nó đề xuất chạy một container tương tác hơn như Ubuntu, vốn duy trì trạng thái chạy và cho phép bạn thực thi lệnh bên trong. Điều này giúp bạn hiểu sự khác biệt giữa container kiểm thử một lần và các container thực tế bạn sẽ dùng cho phát triển.
Cuối cùng, bạn sẽ thấy container thoát. Chương trình
hello-worldđược thiết kế để in thông điệp rồi dừng ngay - không phải dịch vụ hay ứng dụng chạy nền. Nhiệm vụ của container kết thúc khi xác nhận Docker hoạt động.Nếu bạn thấy toàn bộ phần xuất ra này mà không có lỗi, cài đặt Docker của bạn đang hoạt động đúng và bạn đã sẵn sàng chạy các container thực sự.
Vấn đề thường gặp khi chạy Docker Hello World
Ngay cả một bài kiểm thử đơn giản như
hello-worldcũng có thể thất bại nếu Docker không được thiết lập đúng. Dưới đây là các vấn đề thường gặp và cách khắc phục.Không tìm thấy lệnh Docker
Nếu bạn thấy "docker: command not found" hoặc "docker is not recognized," thì Docker chưa được cài hoặc chưa có trong PATH của hệ thống.
Trên Linux, kiểm tra Docker đã cài chưa:
Vị trí Docker
Nếu lệnh trên không trả về gì, bạn cần cài Docker. Trên macOS và Windows, đảm bảo Docker Desktop đã được cài và đang chạy.
Lỗi từ chối quyền
Bạn có thể thấy "permission denied while trying to connect to the Docker daemon socket."
Điều này xảy ra khi tài khoản người dùng của bạn không có quyền truy cập Docker. Trên Linux, bạn cần chạy Docker với sudo hoặc thêm người dùng của bạn vào nhóm
docker:Đăng xuất và đăng nhập lại để thay đổi có hiệu lực. Trên macOS và Windows với Docker Desktop, điều này không phải vấn đề.
Docker daemon không chạy
Nếu bạn nhận "Cannot connect to the Docker daemon," nghĩa là dịch vụ Docker chưa chạy.
Trên Linux, khởi động dịch vụ Docker:
Trên macOS và Windows, mở Docker Desktop. Daemon sẽ tự khởi động khi ứng dụng chạy. Bạn sẽ thấy biểu tượng Docker trên khay hệ thống khi đã sẵn sàng.
Sự cố mạng khi kéo image
Đôi khi Docker không tải được image
hello-worldtừ Docker Hub. Bạn sẽ thấy lỗi không thể kéo hoặc quá thời gian kết nối.Trước tiên, hãy kiểm tra kết nối internet của bạn. Nếu bạn ở sau tường lửa hoặc proxy của doanh nghiệp, có thể cần cấu hình Docker để sử dụng nó. Trên Linux, cấu hình trong
/etc/systemd/system/docker.service.d/http-proxy.conf. Trên Docker Desktop, bạn có thể đặt proxy trong Settings.Nếu các cách này không hiệu quả, thông báo lỗi thường chỉ dẫn bạn đúng hướng - hãy đọc kỹ.
Làm gì sau Docker Hello World
Giờ đây bạn đã xác nhận Docker hoạt động, dưới đây là hướng đi tiếp theo.
Chạy một container thực thụ với shell tương tác. Hãy thử kéo và chạy một container Ubuntu:
Ubuntu bash
Các cờ
-itcung cấp một terminal tương tác bên trong container. Bạn có thể chạy lệnh, cài gói và khám phá cách container hoạt động. Gõexitđể thoát khỏi container.Khám phá các image có sẵn trên Docker Hub. Bạn sẽ tìm thấy image chính thức cho các cơ sở dữ liệu như PostgreSQL và MySQL, ngôn ngữ lập trình như Python và Node.js, và các công cụ như Redis và Nginx. Duyệt tại hub.docker.com hoặc tìm trực tiếp từ dòng lệnh:
Các image Python hiện có.
Tự xây image với Dockerfile. Bắt đầu đơn giản: Tạo một tệp tên
Dockerfileđể sao chép mã ứng dụng của bạn vào container và định nghĩa cách chạy nó. Ngay cả một Dockerfile cơ bản với vài dòng cũng sẽ dạy bạn cách image được xây từ các hướng dẫn.Kết luận
Lệnh
docker run hello-worldlàm tốt một việc: Chứng minh cài đặt Docker của bạn hoạt động.Đây không phải ứng dụng thực sự. Nó sẽ không dạy bạn cách xây container hay triển khai dịch vụ production. Nhưng nó sẽ giúp bạn yên tâm rằng cài đặt Docker của mình không có vấn đề.
Nếu
hello-worldchạy không lỗi và in thông báo xác nhận, môi trường Docker của bạn đã được thiết lập đúng và bạn sẵn sàng làm việc với các container thực sự.Vậy tiếp theo là gì? Hãy tham gia khóa Giới thiệu về Docker của chúng tôi. Khóa học sẽ cho bạn nền tảng cần thiết để làm việc trong nhóm. Sau đó, xây dựng thứ gì hữu ích bằng cách theo dõi bài viết 10 ý tưởng dự án Docker của chúng tôi.