github.com/scaleway/scaleway-cli@v1.11.1/examples/create-image-from-docker.sh (about) 1 #!/bin/bash 2 3 set -e 4 REPO="${1}" 5 6 if [ -z "${1}" ]; then 7 echo "usage: $(basename ${0}) <repo>" 8 echo "" 9 echo "examples:" 10 echo " - $(basename ${0}) armbuild/scw-app-docker:latest" 11 echo " - VOLUME_SIZE=50GB $(basename ${0}) armbuild/scw-app-docker" 12 exit 1 13 fi 14 15 set -e 16 17 NAME=$(basename "${REPO}") 18 NAME=${NAME%.*}-$(date +%Y-%m-%d_%H:%M) 19 VOLUME_SIZE=${VOLUME_SIZE:-50GB} 20 21 22 echo "[+] REPO: ${REPO}" 23 echo "[+] Target name: ${NAME}" 24 25 26 echo "[+] Creating new server in rescue mode with a secondary volume..." 27 SERVER=$(scw create --volume="${VOLUME_SIZE}" --name="image-writer-${NAME}" docker) 28 echo "[+] Server created: ${SERVER}" 29 30 31 echo "[+] Booting..." 32 scw start --wait --timeout=600 "${SERVER}" >/dev/null 33 #IP=$(scw inspect -f .server.public_ip.address "${SERVER}") 34 #echo "[+] SSH is ready (${IP})" 35 echo "[+] Server is booted" 36 scw exec "${SERVER}" 'uname -a' 37 38 39 echo "[+] Formating and mounting /dev/nbd1..." 40 scw exec "${SERVER}" 'mkfs.ext4 /dev/nbd1 && mount /dev/nbd1 /mnt' 41 echo "[+] /dev/nbd1 formatted in ext4 and mounted on /mnt" 42 43 44 echo "[+] Download image" 45 scw exec "${SERVER}" docker pull "${REPO}" 46 echo "[+] Image downloaded" 47 48 echo "[+] Export image to /dev/nbd1" 49 scw exec "${SERVER}" docker run --name tmp --entrypoint /dontexists "${REPO}" 2>/dev/null || true 50 scw exec "${SERVER}" 'docker export tmp > image.tar' 51 scw exec "${SERVER}" tar -C /mnt -xf image.tar 52 #scw exec "${SERVER}" rm -f image.tar 53 scw exec "${SERVER}" rm -f /mnt/.dockerenv /mnt/.dockerinit 54 scw exec "${SERVER}" chmod 1777 /mnt/tmp 55 scw exec "${SERVER}" chmod 755 /mnt/etc /mnt/usr /mnt/usr/local /mnt/usr/sbin 56 scw exec "${SERVER}" chmod 555 /mnt/sys 57 scw exec "${SERVER}" chmod 700 /mnt/root 58 scw exec "${SERVER}" mv /mnt/etc/hosts.default /mnt/etc/hosts || true 59 scw exec "${SERVER}" sync 60 echo "[+] Image exported" 61 62 63 echo "[+] Stopping the server" 64 scw stop "${SERVER}" 65 scw wait "${SERVER}" 66 echo "[+] Server stopped" 67 68 69 echo "[+] Creating a snapshot of nbd1" 70 SNAPSHOT=$(scw commit --volume=1 "${SERVER}" "${NAME}") 71 echo "[+] Snapshot ${SNAPSHOT} created" 72 73 74 echo "[+] Creating an image based of the snapshot" 75 IMAGE=$(scw tag "${SNAPSHOT}" "${NAME}") 76 echo "[+] Image created: ${IMAGE}" 77 78 79 echo "[+] Deleting temporary server" 80 scw rm "${SERVER}" 81 echo "[+] Server deleted"