Cách chạy các ứng dụng dựa trên GUI trong Docker

Docker thường được sử dụng cho các ứng dụng phía server và dòng lệnh. Tuy nhiên, với thiết lập phù hợp, bạn cũng có thể chạy các ứng dụng dựa trên GUI bên trong những container. Các container này có thể bao gồm những thư viện GUI và công cụ hiển thị, cho phép các ứng dụng chạy trong môi trường an toàn và biệt lập. Phương pháp này giúp đơn giản hóa việc phát triển, thử nghiệm và triển khai các ứng dụng GUI trên nhiều máy hoặc môi trường hệ điều hành khác nhau. Bài viết này sẽ hướng dẫn bạn cách chạy các ứng dụng GUI bên trong những container Docker với thiết lập tối thiểu.

Tại sao nên chạy ứng dụng GUI trong Docker?

Sau đây là những lý do chính tại sao chạy ứng dụng GUI trong Docker có thể có lợi:

  • Khi bạn chạy ứng dụng GUI trong Docker, mọi thứ ứng dụng cần, như thư viện và cài đặt, đều được đóng gói bên trong container. Điều này giúp hệ thống chính của bạn không bị lộn xộn hoặc xung đột.
  • Sử dụng Docker có nghĩa là ứng dụng của bạn sẽ hoạt động giống nhau trên mọi máy. Cho dù bạn đang phát triển, thử nghiệm hay chia sẻ với người khác, môi trường vẫn nhất quán.
  • Các container giúp bạn dễ dàng thử nghiệm ứng dụng mới hoặc gỡ lỗi thứ gì đó. Bạn có thể chạy, tạm dừng hoặc xóa chúng mà không ảnh hưởng đến máy host của mình.
  • Docker cho phép bạn chạy các ứng dụng GUI Linux trên những hệ thống không phải Linux. Docker thực hiện điều này bằng cách sử dụng các công cụ chia sẻ hiển thị như XQuartz hoặc VcXsrv, do đó không cần máy ảo.
  • Không giống như VM truyền thống, Docker container sử dụng ít tài nguyên hệ thống hơn. Chúng khởi động nhanh hơn và chạy mượt mà hơn, ngay cả đối với các ứng dụng dựa trên GUI.

Chạy ứng dụng GUI trong Docker

Để chạy ứng dụng GUI trong Docker, trước tiên bạn phải đảm bảo rằng Docker đã được cài đặt trên hệ thống Linux của mình. Bạn có thể kiểm tra điều này bằng cách chạy lệnh sau:

docker --version
Xác minh cài đặt Docker
Xác minh cài đặt Docker

Nếu lệnh này trả về số phiên bản, điều đó có nghĩa là Docker đã được cài đặt và đang hoạt động. Nếu không, bạn có thể sẽ thấy lỗi "command not found".

Sau khi Docker được thiết lập đúng cách, bạn có thể chuyển sang các bước tiếp theo.

Kích hoạt Docker Service

Bây giờ, hãy khởi động service Docker bằng lệnh sau:

sudo systemctl start docker

Để kiểm tra xem service Docker có đang chạy đúng không, hãy chạy:

sudo systemctl status docker

Đầu ra xác nhận rằng service Docker đang hoạt động và chạy mà không có bất kỳ sự cố nào:

Kiểm tra trạng thái Docker
Kiểm tra trạng thái Docker

Thiết lập thư mục dự án và Dockerfile

Hãy tạo một thư mục có tên là "dockerGUI", nơi chúng ta sẽ lưu trữ tất cả các file liên quan đến Docker để chạy các ứng dụng GUI:

mkdir dockerGUI

Bây giờ, hãy điều hướng đến thư mục này để đảm bảo rằng tất cả các file tiếp theo mà chúng ta tạo hoặc sửa đổi sẽ được lưu trong thư mục dockerGUI:

cd dockerGUI

Tạo một file mới có tên là dockerGUIFile để xác định cấu hình image Docker:

nano dockerGUIFile

Bây giờ, hãy dán các dòng code sau vào dockerGUIFile:

FROM jess/firefox
ENV DISPLAY=:0
CMD ["firefox"]

Đoạn code trên yêu cầu Docker sử dụng image dựng sẵn của Firefox và thiết lập môi trường hiển thị để GUI có thể xuất hiện trên hệ thống host. Hơn nữa, nó đảm bảo Firefox tự động khởi chạy khi container chạy.

Lưu ý: Để thử một ứng dụng khác, chỉ cần thay đổi image và lệnh trong Dockerfile. Ví dụ, để chạy Gedit, bạn có thể sử dụng image Ubuntu chính thức và cài đặt ứng dụng trong quá trình build như sau:

FROM ubuntu
RUN apt-get update && apt-get install -y gedit
ENV DISPLAY=:0
CMD ["gedit"]

Build image Docker

Bây giờ, cấu hình Docker đã được thiết lập trong dockerGUIFile, hãy build image Docker bằng lệnh sau:

sudo docker build -t myfirefox:1 -f dockerGUIFile .

Lệnh này build một image Docker từ dockerGUIFile, đặt tên là myfirefox với tag 1 và sử dụng thư mục hiện tại làm ngữ cảnh:

Build image Docker
Build image Docker

Khởi chạy Docker Container với hỗ trợ GUI được bật

Bây giờ, hãy bật hỗ trợ GUI cho các container Docker bằng cách chạy lệnh sau:

xhost +local:docker

Đầu ra xác nhận rằng các client cục bộ (như Docker container) đang chạy trên hệ thống hiện được phép kết nối với máy chủ X:

Cho phép kết nối đến máy chủ X
Cho phép kết nối đến máy chủ X

Bây giờ, hãy chạy container bằng lệnh sau để khởi chạy Firefox với hỗ trợ GUI trên hệ thống host của bạn:

docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myfirefox:1

Kết quả là, lệnh này kết nối container với màn hình, cho phép Firefox mở trên màn hình của bạn giống như một ứng dụng gốc:

Chạy ứng dụng GUI từ Docker
Chạy ứng dụng GUI từ Docker

Lưu ý: Sử dụng tùy chọn --rm khiến Docker tự động xóa container sau khi ứng dụng đóng, giúp hệ thống của bạn sạch sẽ và ngăn không cho nó hiển thị trong docker ps -s.

Ngắt kết nối Docker khỏi server X

Sau khi sử dụng xong ứng dụng GUI, bạn nên đóng quyền truy cập server X vì lý do bảo mật:

xhost -local:docker
Xóa kết nối khỏi server X
Xóa kết nối khỏi server X
Thứ Tư, 18/06/2025 17:22
31 👨 65
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    ❖ Linux
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng