Skip to content

Instantly share code, notes, and snippets.

@strund3r
Last active July 11, 2017 13:40
Show Gist options
  • Save strund3r/5404be61e9032707435b7bb14a5895c6 to your computer and use it in GitHub Desktop.
Save strund3r/5404be61e9032707435b7bb14a5895c6 to your computer and use it in GitHub Desktop.
Self-explaining title (using IP) (Docker 4 AWS)
#!/bin/bash
################ VARIABLES ################
# Image Repository #
image_name="example/example" #
# #
# .pem key's location #
ssh_key_loc="/home/example/example.pem" #
# #
# Manager's IP (IPv4 Public IP) #
host_name="ex.am.pl.e" #
################ VARIABLES ################
# TAG/VERSION
printf "\nEnter the image's tag/version: "
read tag
# SELECT DOCKERFILE
echo -e "\n###########################################################"
# Set the prompt for the select command
PS3=$'\n''Select option: '
# Create a list of files to display
file_list=$(find Dockerfile* -maxdepth 1 -type f)
echo -e "\nSelect which Dockerfile you want to use:\n"
select file_name in ${file_list};
do
if [ -n "${file_name}" ]; then
echo -e "\nYou've selected ${file_name}"
fi
break
done
# BUILD IMAGE
echo -e "
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ BUILDING IMAGE @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
time docker build -f ${file_name} -t ${image_name}:latest .
# TAG IMAGE
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#@ @
#@ TAGGING IMAGE @
#@ @
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
docker tag ${image_name}:latest ${image_name}:${tag}
# PUSH IMAGE TO DOCKERHUB
echo -e "
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ PUSHING IMAGE TO DOCKERHUB @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
time docker push ${image_name}:${tag}
time docker push ${image_name}:latest
# DEPLOY AWS
echo -e "
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ DEPLOYING SERVICES TO AWS @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
# ALL THE CREDIT FOR THE FOLLOWING CONNECTION PART OF THIS SCRIPT GOES TO @hairyhenderson
# Generates random filenames for the SSH configuration and the SSH control socket, not entirely necessary ;)
export _sshconfig="/home/example/.ssh/config"
export _ssh_ctrl_socket=$(mktemp -u)
cat <<EOF > ${_sshconfig}
ControlPath ${_ssh_ctrl_socket}
Host dockermanager
HostName ${host_name}
ServerAliveInterval 9999
ForwardAgent yes
StrictHostKeyChecking no
EOF
ssh-add ${ssh_key_loc}
# Set up an SSH control socket for tunneling, so that we can cleanly close it when we're done
ssh -M -F ${_sshconfig} \
-fnNT -L localhost:2374:/var/run/docker.sock docker@<docker-manager-name>
# configure all `docker` commands to communicate through the SSH tunnel instead of any local docker engine
export DOCKER_HOST=localhost:2374
# now run `docker` commands as normal, use --with-registry-auth flag if pulling image from private registry:
docker stack deploy --with-registry-auth -c <docker-compose-file>.yml <service-stack-name>
# Close the tunnel
ssh -F ${_sshconfig} -O exit -
# remove the temporary SSH-related files
rm -f ${_ssh_ctrl_socket}
unset DOCKER_HOST
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment