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"