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.

Lợi ích khi sử dụng Android Emulator trên Docker
- 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.
- 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).
- Chạy headless tối ưu cho lab/CI: không cần desktop GUI trên server.
- 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.
- Expose ADB qua network: bạn connect từ Windows sang bằng
adb connect <IP>:5555. - Đ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.
- Dễ dàng xóa và khởi tạo: emulator có thể wipe mỗi lần restart (phù hợp test).
- 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.
- Đỡ tốn công support: thay vì fix từng máy dev/QA, bạn chuẩn hoá thành 1 image.
- 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 Options → Advanced → Configuration 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

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

Kiểm tra:
docker ps
docker logs -f android-emulator


(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

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

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

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

(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
5555ra 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ộ.







