Add Docker scripts
This commit is contained in:
parent
d3dd02206d
commit
5e54517122
54
Docker/backupContainer.sh
Normal file
54
Docker/backupContainer.sh
Normal file
@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
|
||||
CONTAINER_NAME="$1"
|
||||
BACKUP_DIR="$2"
|
||||
VOLUME_NAME="$3"
|
||||
|
||||
if [ -z "$BACKUP_DIR" ]; then
|
||||
echo "Usage: $0 <container_name> <backup_directory> <volume_name>"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "$BACKUP_DIR" ]; then
|
||||
echo "Directory $BACKUP_DIR does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#docker stop "$CONTAINER_NAME"
|
||||
#docker commit "$CONTAINER_NAME" "${CONTAINER_NAME}_backup"
|
||||
#docker save -o "$BACKUP_DIR/${CONTAINER_NAME}_backup.tar" "${CONTAINER_NAME}_backup"
|
||||
#docker start "$CONTAINER_NAME"
|
||||
#docker image rm -f "${CONTAINER_NAME}_backup"
|
||||
|
||||
# Backup volume
|
||||
if [ "$VOLUME_NAME" ]; then
|
||||
echo "Backup up volume $VOLUME_NAME"
|
||||
docker run --rm -v "$VOLUME_NAME":/data -v "$BACKUP_DIR":/backup busybox tar czf /backup/"$VOLUME_NAME".tar.gz -C /data .
|
||||
fi
|
||||
|
||||
# Extract image name
|
||||
# IMAGE=$(docker inspect --format '{{.Config.Image}}' "$CONTAINER_NAME")
|
||||
IMAGE="${CONTAINER_NAME}_backup"
|
||||
# Extract ports
|
||||
PORTS=$(docker inspect --format '{{json .HostConfig.PortBindings}}' "$CONTAINER_NAME" | jq -r 'to_entries | map("-p \(.value[0].HostPort):\(.key | sub("/tcp|/udp"; ""))") | join(" ")')
|
||||
# Extract volumes
|
||||
VOLUMES=$(docker inspect --format '{{json .Mounts}}' "$CONTAINER_NAME" | jq -r '.[] | select(.Type == "bind" or .Type == "volume") | "-v " + .Source + ":" + .Destination' | xargs)
|
||||
# Extract environment variables
|
||||
ENV_VARS=$(docker inspect --format '{{json .Config.Env}}' "$CONTAINER_NAME" | jq -r 'map("-e " + .) | join(" ")')
|
||||
# Extract network mode
|
||||
NETWORK_MODE=$(docker inspect --format '{{.HostConfig.NetworkMode}}' "$CONTAINER_NAME")
|
||||
[ "$NETWORK_MODE" != "default" ] && NETWORK="--network=$NETWORK_MODE" || NETWORK=""
|
||||
# Extract restart policy
|
||||
RESTART_POLICY=$(docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' "$CONTAINER_NAME")
|
||||
[ "$RESTART_POLICY" != "no" ] && RESTART="--restart=$RESTART_POLICY" || RESTART=""
|
||||
# Extract privileged mode
|
||||
PRIVILEGED=$(docker inspect --format '{{.HostConfig.Privileged}}' "$CONTAINER_NAME")
|
||||
[ "$PRIVILEGED" == "true" ] && PRIV="--privileged" || PRIV=""
|
||||
# Extract entrypoint (if set)
|
||||
ENTRYPOINT=$(docker inspect --format '{{json .Config.Entrypoint}}' "$CONTAINER_NAME" | jq -r 'if . != null then "--entrypoint \"" + join(" ") + "\"" else "" end')
|
||||
# Extract command (CMD)
|
||||
CMD=$(docker inspect --format '{{json .Config.Cmd}}' "$CONTAINER_NAME" | jq -r 'if . != null then join(" ") else "" end')
|
||||
# Construct final `docker run` command
|
||||
RUN_COMMAND="docker run -d --name $CONTAINER_NAME $PORTS $VOLUMES $ENV_VARS $NETWORK $RESTART $PRIV $ENTRYPOINT $IMAGE $CMD"
|
||||
|
||||
# echo "$RUN_COMMAND"
|
||||
echo "$RUN_COMMAND" > "$BACKUP_DIR/${CONTAINER_NAME}_deploy.sh"
|
40
Docker/installPortainer.sh
Normal file
40
Docker/installPortainer.sh
Normal file
@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
PRIMARY_NIC=$(ip route | awk '/default/ {print $5}')
|
||||
IP_ADDRESS=$(ip -4 addr show "$PRIMARY_NIC" | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
|
||||
if ! [ -x "$(command -v docker)" ]; then
|
||||
read -p "Docker not detected. Do you want to install it?" -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Installing docker"
|
||||
# https://docs.docker.com/engine/install/ubuntu/
|
||||
# Add Docker's official GPG key:
|
||||
sudo apt-get update
|
||||
sudo apt-get install ca-certificates curl
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
# Add the repository to Apt sources:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt-get update
|
||||
|
||||
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if [ ! "$(docker ps -a -q -f name=portainer)" ]; then
|
||||
echo "Installing portainer"
|
||||
if ! (docker volume ls --format "{{.Name}}" | grep -q "^portainer_data$"); then
|
||||
echo "Create portainer volume"
|
||||
docker volume create portainer_data
|
||||
fi
|
||||
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
|
||||
fi
|
||||
|
||||
echo "You can now access Portainer on https://$IP_ADDRESS:9443"
|
25
Docker/restoreContainer.sh
Normal file
25
Docker/restoreContainer.sh
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
CONTAINER_NAME="$1"
|
||||
BACKUP_DIR="$2"
|
||||
VOLUME_NAME="$3"
|
||||
|
||||
if [ -z "$BACKUP_DIR" ]; then
|
||||
echo "Usage: $0 <container_name> <backup_directory> <volume_name>"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "$BACKUP_DIR" ]; then
|
||||
echo "Directory $BACKUP_DIR does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Load image
|
||||
docker load -i "$BACKUP_DIR/${CONTAINER_NAME}_backup.tar"
|
||||
|
||||
if [ ! -f "${BACKUP_DIR}/${VOLUME_NAME}".tar.gz ]; then
|
||||
echo "Restoring volume ${VOLUME_NAME}"
|
||||
docker volume create "$VOLUME_NAME"
|
||||
docker run --rm -v "$VOLUME_NAME":/data -v "$BACKUP_DIR":/backup busybox tar xzf /backup/"$VOLUME_NAME".tar.gz -C /data
|
||||
fi
|
||||
|
||||
echo "Restore complete. Deploy using: ${BACKUP_DIR}/${CONTAINER_NAME}_deploy.sh"
|
Loading…
x
Reference in New Issue
Block a user