-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker.bash
137 lines (117 loc) · 2.57 KB
/
docker.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Windows support
docker()
{
if $WINDOWS; then
eval winpty docker $(cygpathmap "$@")
else
command docker "$@"
fi
}
docker-compose()
{
if $WINDOWS; then
eval winpty docker-compose $(cygpathmap "$@")
else
command docker-compose "$@"
fi
}
alias docker-machine='winpty docker-machine'
# Shorthand
alias d='docker'
alias db='docker build'
alias dc='docker-compose'
alias dcr='docker-compose run'
alias dm='docker-machine'
alias dr='docker run'
# Clean up stopped containers and dangling (untagged) images
dclean()
{
docker container prune
docker image prune
}
# Environment
denv()
{
echo "Switching Docker environment..."
cmd="$(docker-machine env "${1:-default}")" || return
eval "$cmd"
echo "Done."
}
# Kill most recent container
dkill()
{
container="$(docker ps -ql)"
if [ -n "$container" ]; then
docker kill $container
fi
}
# Kill all containers
dkillall()
{
containers="$(docker ps -q)"
if [ -n "$containers" ]; then
docker kill $containers
fi
}
# Init
dinit()
{
docker-machine create --driver virtualbox "${1:-default}"
denv "${1:-default}"
}
# Resume
dresume()
{
# http://stackoverflow.com/a/37886136/167815
container="$(docker ps -qlf status=exited)"
if [ -n "$container" ]; then
docker start -ai "$container"
else
echo "No stopped images found." >&2
return 1
fi
}
# Shell
dsh()
{
# Set up SSH agent forwarding
if [ -n "$SSH_AUTH_SOCK" ]; then
opt="--volume \$SSH_AUTH_SOCK:/tmp/ssh-agent --env SSH_AUTH_SOCK=/tmp/ssh-agent"
else
opt=
fi
# Build the command to run a shell on the specified image
local cmd="docker run $opt -it --entrypoint '${2:-/bin/bash}' '${1:-ubuntu}'"
# If using Windows, we need to connect to the Docker VM first
if $WINDOWS; then
# -A = Enable agent forwarding, -t = Force TTY allocation
dssh "$DOCKER_MACHINE_NAME" -At "$cmd"
else
eval "$cmd"
fi
}
# SSH to docker-machine
dssh()
{
# This avoids using 'docker-machine ssh' which breaks formatting in Cygwin
machine="${1:-$DOCKER_MACHINE_NAME}"
shift
ip="$(docker-machine ip "$machine")" || return
ssh -i "$HOME/.docker/machine/machines/$machine/id_rsa" "docker@$ip" "$@"
}
# Stop most recent container
dstop()
{
container="$(docker ps -ql)"
if [ -n "$container" ]; then
docker kill $container
fi
}
# Stop all containers
dstopall()
{
containers="$(docker ps -q)"
if [ -n "$containers" ]; then
docker stop $containers
fi
}