cyberkernelofficial / docker-in-termux

This repository contains instructions on how to install Docker in Termux, without root.
MIT License
253 stars 23 forks source link
docker docker-in-termux termux termux-tool termux-tools

Installing Docker in Termux

This repository contains instructions on how to install Docker in Termux, a powerful terminal emulator for Android.

Prerequisites

Before proceeding with the installation, make sure you have the following prerequisites:

Installation Steps

Follow the steps below to install Docker in Termux:

  1. Open Termux on your Android device.

  2. Update and upgrade the packages by running the following command:

    pkg update -y && pkg upgrade -y
  3. Install the necessary dependencies by running the following command:

    pkg install qemu-utils qemu-common qemu-system-x86_64-headless wget -y
  4. Create a seperate directory:

    mkdir alpine && cd alpine
  5. Download Alpine Linux 3.19 (virt optimized) ISO:

    wget http://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.1-x86_64.iso
  6. Create disk (note it won't actually take 5GB of space, more like 500-600MB):

    qemu-img create -f qcow2 alpine.img 5G
  7. Boot it up:

    qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -cdrom alpine-virt-3.19.1-x86_64.iso -nographic alpine.img
  8. Login with username root (no password)

  9. Setup network (press Enter to use defaults):

    localhost:~# setup-interfaces
    Available interfaces are: eth0.
    Enter '?' for help on bridges, bonding and vlans.
    Which one do you want to initialize? (or '?' or 'done') [eth0]
    Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
    Do you want to do any manual network configuration? [no]

    localhost:~#

    ifup eth0
  10. Create an answerfile to speed up installation:

    wget https://raw.githubusercontent.com/cyberkernelofficial/docker-in-termux/main/answerfile

    NOTE: If you see any error like this: wget: bad address 'gist.githubusercontent.com'. Then run this command

    echo -e "nameserver 192.168.1.1\nnameserver 1.1.1.1" > /etc/resolv.conf
  11. Patch setup-disk to enable serial console output on boot:

    sed -i -E 's/(local kernel_opts)=.*/\1="console=ttyS0"/' /sbin/setup-disk
  12. Run setup to install to disk

    setup-alpine -f answerfile
  13. Once installation is complete, power off the VM (command poweroff)

  14. Boot again without cdrom:

    qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -nographic alpine.img

A - nano run_qemu.sh In the text editor, write the following:

#!/bin/bash
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -nographic alpine.img

Save and close the file. In nano, you can do this by pressing Ctrl+X, then Y to confirm saving, and then Enter to confirm the filename.

B - chmod command: chmod +x run_qemu.sh

C - ./run_qemu.sh

  1. Update system and install docker:

echo "nameserver 8.8.8.8" > /etc/resolv.conf echo "nameserver 8.8.4.4" >> /etc/resolv.conf

apk update && apk add docker


16. Start docker:
```bash
service docker start
  1. Enable docker on boot:

    rc-update add docker
  2. Check docker install successfully or not:

    docker run hello-world

Some useful keys

Usage

Now that Docker is installed in Termux, you can start using it to manage and run containers on your Android device. Refer to the official Docker documentation for more information on how to use Docker.

Contributing

If you encounter any issues during the installation process or have suggestions for improvements, please feel free to open an issue or submit a pull request.

Acknowledgment

License

This project is licensed under the MIT License.