Prepare for public release
This commit is contained in:
		
						commit
						de73b968bc
					
				
							
								
								
									
										51
									
								
								docker-children
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										51
									
								
								docker-children
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
#
 | 
			
		||||
# usage: python3 docker_descendants.py <image_id> ...
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
from subprocess import check_output
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(images):
 | 
			
		||||
    image_ids = set(images)
 | 
			
		||||
    all_images = docker_images('--all', '--quiet')
 | 
			
		||||
    all_links = parse_links(docker_links(all_images))
 | 
			
		||||
    descendants = desc(image_ids, all_links)
 | 
			
		||||
    pred = lambda s: lambda line: s[:12] in line
 | 
			
		||||
    match = list(map(pred, descendants))
 | 
			
		||||
    return filter(lambda i: any(s(i) for s in match), docker_images())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_links(lines):
 | 
			
		||||
    parseid = lambda s: s.replace('sha256:', '')
 | 
			
		||||
    for line in reversed(list(lines)):
 | 
			
		||||
        yield list(map(parseid, line.split()))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def desc(image_ids, links):
 | 
			
		||||
    if links:
 | 
			
		||||
        link, *tail = links
 | 
			
		||||
        if len(link) > 1:
 | 
			
		||||
            image_id, parent_id = link
 | 
			
		||||
            checkid = lambda i: parent_id.startswith(i)
 | 
			
		||||
            if any(map(checkid, image_ids)):
 | 
			
		||||
                return desc(image_ids | {image_id}, tail)
 | 
			
		||||
        return desc(image_ids, tail)
 | 
			
		||||
    return image_ids
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def docker_links(images):
 | 
			
		||||
    cmd = [ 'docker', 'inspect', '--format={{.Id}} {{.Parent}}']
 | 
			
		||||
    return run(cmd + images)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def docker_images(*args):
 | 
			
		||||
    return run(('docker', 'images') + args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def run(cmd):
 | 
			
		||||
    return check_output(cmd, universal_newlines=True).splitlines()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    print('\n'.join(main(sys.argv[1:])))
 | 
			
		||||
							
								
								
									
										9
									
								
								docker-clean-all
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								docker-clean-all
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# remove exited containers:
 | 
			
		||||
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v
 | 
			
		||||
# remove unused images
 | 
			
		||||
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi -f
 | 
			
		||||
# remove unused volumes:
 | 
			
		||||
docker volume prune -f
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								docker-destroy-all
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								docker-destroy-all
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
CONTAINER=$(docker ps -a -q)
 | 
			
		||||
docker stop $CONTAINER
 | 
			
		||||
docker rm $CONTAINER
 | 
			
		||||
							
								
								
									
										3
									
								
								docker-ls
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker-ls
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"
 | 
			
		||||
							
								
								
									
										21
									
								
								docker-net-optimize
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								docker-net-optimize
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
sysctl -w net.core.netdev_max_backlog="150000"
 | 
			
		||||
sysctl -w net.core.rmem_max="16777216"
 | 
			
		||||
sysctl -w net.core.somaxconn="65535"
 | 
			
		||||
sysctl -w net.core.wmem_max="16777216"
 | 
			
		||||
sysctl -w net.ipv4.ip_local_port_range="1025       65535"
 | 
			
		||||
sysctl -w net.ipv4.tcp_fin_timeout="20"
 | 
			
		||||
sysctl -w net.ipv4.tcp_keepalive_time="30"
 | 
			
		||||
sysctl -w net.ipv4.tcp_max_syn_backlog="20480"
 | 
			
		||||
sysctl -w net.ipv4.tcp_max_tw_buckets="400000"
 | 
			
		||||
sysctl -w net.ipv4.tcp_no_metrics_save="1"
 | 
			
		||||
sysctl -w net.ipv4.tcp_syn_retries="2"
 | 
			
		||||
sysctl -w net.ipv4.tcp_synack_retries="2"
 | 
			
		||||
sysctl -w net.ipv4.tcp_tw_reuse="1"
 | 
			
		||||
sysctl -w net.ipv4.tcp_timestamps="0"
 | 
			
		||||
sysctl -w vm.min_free_kbytes="65536"
 | 
			
		||||
sysctl -w vm.overcommit_memory="1"
 | 
			
		||||
sysctl -w vm.max_map_count="2621440"
 | 
			
		||||
sysctl -w vm.swappiness="10"
 | 
			
		||||
sysctl -w vm.dirty_ratio="40"
 | 
			
		||||
							
								
								
									
										17
									
								
								docker-node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								docker-node
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# this command helper depends on key-based (passwordless) SSH access by the current user to each of the docker swarm nodes.
 | 
			
		||||
NODE_HOST=$1; shift;
 | 
			
		||||
 | 
			
		||||
nc -zvw3 $NODE_HOST 22 &> /dev/null;
 | 
			
		||||
PING_RESULT=$?
 | 
			
		||||
 | 
			
		||||
if [ $PING_RESULT != 0 ]; then
 | 
			
		||||
  echo
 | 
			
		||||
  echo "Host '$NODE_HOST' not reachable."
 | 
			
		||||
  exit 2
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# connect to the docker host through SSH
 | 
			
		||||
export DOCKER_HOST="ssh://$(whoami)@$NODE_HOST.$(hostname -d)"
 | 
			
		||||
# execute the command
 | 
			
		||||
docker $@
 | 
			
		||||
							
								
								
									
										3
									
								
								docker-ps
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker-ps
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h
 | 
			
		||||
							
								
								
									
										53
									
								
								docker-service-exec
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										53
									
								
								docker-service-exec
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# this command helper depends on key-based (passwordless) SSH access by the current user to each of the docker swarm nodes.
 | 
			
		||||
# usage help.
 | 
			
		||||
usage()
 | 
			
		||||
{
 | 
			
		||||
    echo
 | 
			
		||||
    echo "Usage: docker-service-exec [OPTIONS] SERVICE COMMAND [ARG...]"
 | 
			
		||||
    echo
 | 
			
		||||
    echo "Run a command in a running swarm service"
 | 
			
		||||
    echo
 | 
			
		||||
    echo "Options:
 | 
			
		||||
  -i, --interactive          Keep STDIN open even if not attached
 | 
			
		||||
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
 | 
			
		||||
  -w, --workdir string       Working directory inside the container"
 | 
			
		||||
  exit 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# parse the arguments
 | 
			
		||||
PARSED_ARGUMENTS=$(getopt -q -a -n docker-service-exec -o iu:w: -l interactive,it,user:,workdir: -- "$@")
 | 
			
		||||
VALID_ARGUMENTS=$?
 | 
			
		||||
if [ "$VALID_ARGUMENTS" != "0" ]; then
 | 
			
		||||
  usage
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# use below for diagnostics only.
 | 
			
		||||
# echo "PARSED_ARGUMENTS is $PARSED_ARGUMENTS"
 | 
			
		||||
eval set -- "$PARSED_ARGUMENTS"
 | 
			
		||||
while :
 | 
			
		||||
do 
 | 
			
		||||
  case "$1" in
 | 
			
		||||
    -i | --it | --interactive)  OPT_INTERACTIVE="-it"; shift ;;
 | 
			
		||||
    -u | --user)                OPT_USER="-u $2"; shift 2 ;;
 | 
			
		||||
    -w | --workdir)             OPT_WORKDIR="-w $2"; shift 2 ;;
 | 
			
		||||
    # -- means the end of the arguments; drop this, and break out of the while loop
 | 
			
		||||
    --) shift; break ;;
 | 
			
		||||
    # If invalid options were passed, then getopt should have reported an error,
 | 
			
		||||
    # which we checked as VALID_ARGUMENTS when getopt was called...
 | 
			
		||||
    *)
 | 
			
		||||
    echo "Unexpected option: $1 - this should not happen."
 | 
			
		||||
    usage;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# discover docker server vars.
 | 
			
		||||
SERVICE_NAME=$1; shift
 | 
			
		||||
TASK_ID=$(docker service ps --filter 'desired-state=running' $SERVICE_NAME -q)
 | 
			
		||||
NODE_ID=$(docker inspect --format '{{ .NodeID }}' $TASK_ID)
 | 
			
		||||
CONTAINER_ID=$(docker inspect --format '{{ .Status.ContainerStatus.ContainerID }}' $TASK_ID)
 | 
			
		||||
NODE_HOST=$(docker node inspect --format '{{ .Description.Hostname }}' $NODE_ID)
 | 
			
		||||
# connect to the docker host through SSH
 | 
			
		||||
export DOCKER_HOST="ssh://$(whoami)@$NODE_HOST.$(hostname -d)"
 | 
			
		||||
# execute the command
 | 
			
		||||
docker exec $OPT_INTERACTIVE $OPT_USER $OPT_WORKDIR $CONTAINER_ID "$@"
 | 
			
		||||
							
								
								
									
										2
									
								
								docker-service-ps
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								docker-service-ps
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
docker node ps $(docker node ls -q) --filter 'desired-state=Running' --format "table {{ .ID }}\t{{ .Name }}\t{{ .Image }}\t{{ .Node }}\t{{ .DesiredState }}\t{{ .CurrentState }}" | uniq
 | 
			
		||||
							
								
								
									
										18
									
								
								docker-stack-deploy
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								docker-stack-deploy
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# assumes compose files for swarm are specified as docker-compose.stack.yml.
 | 
			
		||||
 | 
			
		||||
# identify the parent directory in order to name the service.
 | 
			
		||||
PARENT_DIR="${PWD##*/}"
 | 
			
		||||
# replace restricted characters.
 | 
			
		||||
PARENT_DIR=$( echo $PARENT_DIR | tr ' '. _ )
 | 
			
		||||
 | 
			
		||||
# attempt to find a suitable compose file.
 | 
			
		||||
if [ ! -f "docker-compose.stack.yml" ]; then
 | 
			
		||||
  echo "No suitable stack compose file found in directory.";
 | 
			
		||||
  exit 1;
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# if we found a compose file, deploy it.
 | 
			
		||||
echo "Deploying stack as ${PARENT_DIR}..."
 | 
			
		||||
docker stack deploy -c docker-compose.stack.yml --with-registry-auth ${PARENT_DIR}
 | 
			
		||||
							
								
								
									
										22
									
								
								docker-stack-rm
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								docker-stack-rm
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# identify the parent directory in order to name the service.
 | 
			
		||||
PARENT_DIR="${PWD##*/}"
 | 
			
		||||
# replace restricted characters.
 | 
			
		||||
PARENT_DIR=$( echo $PARENT_DIR | tr ' '. _ )
 | 
			
		||||
# retrieve any stack matching the parent dir.
 | 
			
		||||
RUNNING_STACK=$( docker stack ls | grep $PARENT_DIR )
 | 
			
		||||
 | 
			
		||||
# attempt to find a running stack with the specified name.
 | 
			
		||||
if [ -z "$RUNNING_STACK" ]; then
 | 
			
		||||
  echo "No running stacks were found matching '$PARENT_DIR'.";
 | 
			
		||||
  exit 1;
 | 
			
		||||
fi
 | 
			
		||||
# sanitize the running stack string.
 | 
			
		||||
RUNNING_STACK=$( echo $PARENT_DIR | cut -d " " -f1 )
 | 
			
		||||
 | 
			
		||||
# if we found a running stack, bring it down.
 | 
			
		||||
echo "Removing stack $RUNNING_STACK..."
 | 
			
		||||
docker stack rm $RUNNING_STACK
 | 
			
		||||
echo "Waiting for 30 seconds for services to terminate..."
 | 
			
		||||
sleep 30
 | 
			
		||||
							
								
								
									
										3
									
								
								docker-start-all
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker-start-all
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
docker start $(docker ps -a -q)
 | 
			
		||||
							
								
								
									
										3
									
								
								docker-stop-all
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker-stop-all
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
docker stop $(docker ps -a -q)
 | 
			
		||||
							
								
								
									
										12
									
								
								docker-system-prune
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								docker-system-prune
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
#set -ex
 | 
			
		||||
 | 
			
		||||
SSH_USER=$(whoami)
 | 
			
		||||
SWARM_MANAGER_IP=$(docker node inspect self --format '{{ .Status.Addr  }}')
 | 
			
		||||
HOSTS=$(docker node ls --format="{{ .Hostname }}")
 | 
			
		||||
echo
 | 
			
		||||
for HOSTNAME in ${HOSTS}; do 
 | 
			
		||||
    echo "Processing system prune operation for host: ${HOSTNAME}..."
 | 
			
		||||
    ssh "${SSH_USER}@${HOSTNAME}.$(hostname -d)" 'docker system prune -f';
 | 
			
		||||
    echo
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										28
									
								
								docker-update-all
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								docker-update-all
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
if [ ! -z $1 ]; then
 | 
			
		||||
  START_DIR="$1"
 | 
			
		||||
else
 | 
			
		||||
  START_DIR="$HOME/docker-compose"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -d "$START_DIR" ]; then
 | 
			
		||||
  echo "Invalid directory '$START_DIR': Exiting."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Current dir is $START_DIR"
 | 
			
		||||
 | 
			
		||||
for f in $(find $START_DIR/ -iname "docker-compose.yml")
 | 
			
		||||
do
 | 
			
		||||
  CURRENT_DIR=$(dirname "${f}")
 | 
			
		||||
  echo "Updating $CURRENT_DIR..."
 | 
			
		||||
  cd $CURRENT_DIR
 | 
			
		||||
  if [ ! -f ".update.ignore" ]; then
 | 
			
		||||
    docker-compose pull --no-parallel && docker-compose up -d --remove-orphans 2>&1
 | 
			
		||||
  else
 | 
			
		||||
    echo "Stack flagged for ignore updates"
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
cd $START_DIR
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user