Cách cài đặt Android bằng Docker (chi tiết từng bước)

Trong nhiều môi trường doanh nghiệp, QA hoặc Mobile không được cài Android Studio/SDK trên máy cá nhân vì nặng, khó kiểm soát và rủi ro lệch môi trường.

Khi cần chạy emulator để debug, test automation hoặc Appium, việc cài SDK, tạo AVD, fix lỗi KVM thường tốn rất nhiều thời gian.

Một giải pháp khá hữu ích chính là chạy Android Emulator bằng Docker: emulator nằm trong private network, expose ADB ra ngoài, có thể điều khiển từ Windows hoặc Linux, mở màn hình bằng scrcpy.

Bản chất chỉ là Docker image chứa Android Emulator + ADB, chạy headless, hỗ trợ KVM, phù hợp cho CI hoặc dùng nội bộ. Bài viết này sẽ hướng dẫn bạn từng bước để thực hiện cài đặt và sử dụng.

android-on-docker

Lợi ích khi sử dụng Android Emulator trên Docker

  1. Triển khai cực nhanh: không cần cài Android Studio nặng nề, chỉ cần pull image và chạy container.
  2. Tự động hóa dễ dàng: cực hợp để nhét vào CI/CD, pipeline, script (spin up / tear down emulator theo job).
  3. Chạy headless tối ưu cho lab/CI: không cần desktop GUI trên server.
  4. KVM tăng tốc rõ rệt: nếu host có VT-x/AMD-V + KVM, emulator mượt hơn hẳn chạy software.
  5. Expose ADB qua network: bạn connect từ Windows sang bằng adb connect <IP>:5555.
  6. Điều khiển màn hình bằng scrcpy: không cần VNC, vẫn xem/điều khiển emulator qua ADB.
  7. Dễ dàng xóa và khởi tạo: emulator có thể wipe mỗi lần restart (phù hợp test).
  8. Phù hợp mô hình Android farm nội bộ: một server dựng sẵn, QA chỉ việc dùng private IP.
  9. Đỡ tốn công support: thay vì fix từng máy dev/QA, bạn chuẩn hoá thành 1 image.
  10. Linh hoạt mở rộng: tuỳ biến Android version/image type khi cần.

Và thêm rất nhiều ưu điểm khác. Tuy nhiên chắc chắn không có cái gì hoàn hảo tuyệt đối, quan trọng là bạn hiểu bản chất của công cụ và chọn đúng bài toán để dùng.

Các bước cài đặt Android trên Docker

Step 1: Chuẩn bị

Tùy vào hạ tầng và bài toán của bạn để có hạ tầng phù hợp, dưới đây là cấu hình đề xuất nếu bạn muốn làm Lab nắm bắt kiến thức: server Ubuntu chạy trên VMware, phần cứng máy chủ cần hỗ trợ ảo hóa (Virtualization).

Hệ điều hành RAM CPU Disk
Ubuntu Server 8 GB 4 Core 50~100 GB

Step 2: Bật Nested VT-x/EPT trên VMware

Bước 1. Đảm bảo đã tắt VM.

Bước 2. Cấu hình bật Nested VT-x/EPT

  • vSphere/ESXi
    • Chuột phải VM → Edit Settings → VM OptionsAdvancedConfiguration Parameters…
    • Thêm (hoặc sửa) khóa: vhv.enable = "TRUE"
    • CPU: bật “Expose virtualization extensions to the guest OS”
    • Nếu có CPU/MMU Virtualization, chọn “Intel VT-x/EPT”
  • VMware Workstation / Fusion
    • VM → Settings → Processors → tick “Virtualize Intel VT-x/EPT or AMD-V/RVI
    • (Tuỳ chọn) tick “Virtualize CPU performance counters”

Bước 3. Bật lại VM, kiểm tra guest đã thấy VT-x:

grep -m1 -o 'vmx\|svm' /proc/cpuinfo || echo "NO_VTX"

Kết quả đúng sẽ ra vmx (Intel) hoặc svm (AMD).

Lưu ý: container sẽ cần /dev/kvm. Nếu VM không nhận nested virtualization thì thường sẽ không có (hoặc không dùng được) /dev/kvm.

Step 3: Pull docker-android image

Đảm bảo server đã được cài Docker và Docker Compose phiên bản không quá cũ (vì bạn sẽ pull image vài GB và chạy emulator), bạn có thể tham khảo cách cài đặt Docker phiên bản mới nhất tự động bằng bashscript.

docker pull halimqarroum/docker-android:api-33
android-on-docker

Step 4: Cài đặt Android trên Docker

Chạy emulator dạng container, mount KVM device và mở port ADB:

docker run -d \
  --name android-emulator \
  --device /dev/kvm \
  -p 5555:5555 \
  halimqarroum/docker-android:api-33
android-on-docker

Kiểm tra:

docker ps
docker logs -f android-emulator
android-on-docker
android-on-docker

(Cách cài khác) Cài đặt Android bằng Docker-compose

Clone repository:

git clone https://github.com/HQarroum/docker-android/

Mặc định hiện tại sẽ bị lỗi base image 21-jdk-slim, fix bằng cách sử dụng base image eclipse-temurin:21-jdk-jammy, chạy lệnh:

sed -i 's/^FROM openjdk:21-jdk-slim/FROM eclipse-temurin:21-jdk-jammy/' Dockerfile

Chạy docker-compose:

docker-compose up -d android-emulator

Nếu lỗi api-33, sử dụng docker pull halimqarroum/docker-android:api-33

(Tuỳ chọn) Giữ dữ liệu AVD sau khi restart

AVD thường được lưu trong /data, bạn có thể mount volume để tránh wipe:

docker run -d \
  --name android-emulator \
  --device /dev/kvm \
  -p 5555:5555 \
  -v $HOME/android_avd:/data \
  halimqarroum/docker-android:api-33

Step 5: Kết nối ADB trên Windows

Bước 1: Cài ADB (Android Platform Tools)

Tải tại:

https://developer.android.com/tools/releases/platform-tools

Giải nén, ví dụ vào:

C:\DevopsVietNam\platform-tools

Bước 2: Mở terminal đúng thư mục (tránh lỗi adb không nhận)

PowerShell:

cd C:\DevopsVietNam\platform-tools
.\adb.exe version
android-on-docker

Bước 3: Connect với Android

Lưu ý: <IP_VM> là IP của Ubuntu VM đang chạy Docker (không phải IP container).

.\adb.exe kill-server
.\adb.exe start-server
.\adb.exe connect <IP_VM>:5555
android-on-docker

Bước 4: Kiểm tra thiết bị đã kết nối

.\adb.exe devices

Nếu ổn bạn sẽ thấy:

<IP_VM>:5555    device
android-on-docker

Step 6: Mở giao diện Android trên Windows (scrcpy)

Bước 1: Cài scrcpy cho Windows

Tải bản Windows tại:

https://github.com/Genymobile/scrcpy/releases

Giải nén, ví dụ:

C:\DevopsVietNam\scrcpy

Bước 2: Kiểm tra phiên bản scrcpy

cd C:\DevopsVietNam\scrcpy
.\scrcpy.exe --version

Bước 3: Mở giao diện Android

Bạn đã adb connect ở Step 5 rồi, giờ chỉ cần chạy:

.\scrcpy.exe -s <IP_VM>:5555
android-on-docker

(Tùy chọn) Một vài lưu ý rất hay gặp khi làm lab

  • Không connect được ADB: kiểm tra VM đang dùng NAT/Bridged. Nếu NAT mà không forward port thì Windows có cùng network cũng không connect vào port 5555 được.
  • Emulator chạy chậm: gần như chắc do không ăn KVM (nested VT-x/EPT chưa bật đúng).
  • Bảo mật: khi muốn expose 5555 ra internet public hãy cân nhắc cẩn thận kỹ. Đây là ADB over TCP, chỉ nên mở trong LAN/VPN và giới hạn IP bằng firewall.

Với Docker, việc dựng Android Emulator chỉ với vài dòng lệnh, bạn đã có một Android dùng để test/debug/automation chạy trên server và điều khiển từ Windows bằng ADB + scrcpy. Đây không chỉ là cách dựng emulator nhanh hơn, mà còn là một bước để bạn chuẩn hoá môi trường test và chủ động hơn khi vận hành lab/CI nội bộ.

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia