FROM debian:12 ENV DEBIAN_FRONTEND=noninteractive ENV LANG=C.UTF-8 # Cài package cần thiết RUN apt-get update && apt-get install -y --no-install-recommends \ qemu-system-x86 \ qemu-utils \ sudo \ cloud-image-utils \ software-properties-common \ genisoimage \ novnc \ websockify \ curl \ unzip \ python3-pip \ openssh-client \ net-tools \ netcat-openbsd \ bash \ wget \ && rm -rf /var/lib/apt/lists/* && apt clean # Tạo thư mục cần thiết RUN mkdir -p /data /novnc /opt/qemu /cloud-init && \ chmod -R 777 /data /novnc /opt/qemu /cloud-init # Download Alpine Cloud Image RUN curl -L https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/cloud/aws_alpine-3.22.1-x86_64-bios-tiny-r0.vhd \ -o /opt/qemu/alpine.vhd && \ chmod 666 /opt/qemu/alpine.vhd # Convert sang raw + resize 64G + chmod RUN qemu-img convert -f vpc -O raw /opt/qemu/alpine.vhd /opt/qemu/alpine.raw && \ qemu-img resize /opt/qemu/alpine.raw 64G && \ chmod 666 /opt/qemu/alpine.raw # Tạo meta-data RUN echo "instance-id: alpine-vm\nlocal-hostname: localhost" > /cloud-init/meta-data && \ chmod 666 /cloud-init/meta-data # Tạo user-data RUN printf "#cloud-config\n\ preserve_hostname: false\n\ hostname: localhost\n\ users:\n\ - name: alpine\n\ gecos: alpine\n\ shell: /bin/sh\n\ lock_passwd: false\n\ passwd: \$6\$abcd1234\$W6wzBuvyE.D1mBGAgQw2uvUO/honRrnAGjFhMXSk0LUbZosYtoHy1tUtYhKlALqIldOGPrYnhSrOfAknpm91i0\n\ sudo: ALL=(ALL) NOPASSWD:ALL\n\ disable_root: false\n\ ssh_pwauth: true\n\ chpasswd:\n\ list: |\n\ alpine:root\n\ expire: false\n\ runcmd:\n\ - systemctl enable ssh\n\ - systemctl restart ssh\n" > /cloud-init/user-data && \ chmod 666 /cloud-init/user-data # Tạo ISO cloud-init RUN genisoimage -output /opt/qemu/seed.iso -volid cidata -joliet -rock \ /cloud-init/user-data /cloud-init/meta-data && \ chmod 666 /opt/qemu/seed.iso # Setup noVNC RUN curl -L https://github.com/novnc/noVNC/archive/refs/tags/v1.3.0.zip -o /tmp/novnc.zip && \ unzip /tmp/novnc.zip -d /tmp && \ mv /tmp/noVNC-1.3.0/* /novnc && \ rm -rf /tmp/novnc.zip /tmp/noVNC-1.3.0 && \ chmod -R 777 /novnc # Copy start.sh COPY start.sh /start.sh RUN chmod +x /start.sh EXPOSE 7860 2222 CMD ["bash", "/start.sh"]