Skip to content

Docker image: pull and run

run.sh

bash
#!/bin/bash
# Author: Kamas Lau<[email protected]>
# Run with "sh -x run.sh", or "MODE=init APP_NAME=your-app-name sh run.sh"
# Node.js w/ docker 项目运行脚本

# Output message to console
log() {
  echo "$@" >&2
}

ORG_NAME=${ORG_NAME:="kamaslau"}
APP_NAME=${APP_NAME:="manual"}

CN=${CN:="y"}
# Use Mirrors for usage in PRC
if [ "$CN" = y ]; then
  log "Deploy in PRC"
  REGISTRY=${REGISTRY:="registry.cn-shanghai.aliyuncs.com"} # Aliyun
else
  REGISTRY=${REGISTRY:="ghcr.io"} # GitHub
  # REGISTRY=${REGISTRY:="docker.io"} # Docker Hub
fi

PORT=${PORT:="3000"}
MODE=${MODE:="upgrade"} # Deploy mode. 'init' for initiation, 'update' for upgrade

IMAGE_NAME="$REGISTRY"/"$ORG_NAME"/"$APP_NAME"

# Pull latest image
docker pull $IMAGE_NAME:latest

# Stop and remove current container (if any)
# Initiate/reinstall project
if [ "$MODE" = upgrade ]; then
  if [ $(docker ps -aq --filter name=$APP_NAME) ]; then
    docker stop $APP_NAME
    docker rm $APP_NAME
  fi
fi

# Create new container
docker run --name $APP_NAME --restart always -d -p $PORT:3000 --link mysql $IMAGE_NAME

# [Optional] Trash-out deprecated image(s)
# docker image prune -f
# docker rmi $(docker images --filter dangling=true -q)

# EOL
exit 0