66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
install() {
|
||
|
# Install needed software once
|
||
|
sudo apt -y install docker.io
|
||
|
sudo groupadd docker
|
||
|
sudo usermod -aG docker $USER
|
||
|
# Logout and login if you were not in group 'docker' before
|
||
|
docker run hello-world
|
||
|
}
|
||
|
setup() {
|
||
|
# Configure the virtual servers
|
||
|
mkdir -p my-ubuntu/ ssh/
|
||
|
cp ~/.ssh/id_rsa.pub ssh/
|
||
|
cat ssh/*.pub > my-ubuntu/authorized_keys
|
||
|
cat >my-ubuntu/Dockerfile <<EOF
|
||
|
FROM ubuntu:bionic
|
||
|
RUN apt update && \
|
||
|
apt install -y openssh-server
|
||
|
RUN mkdir /root/.ssh
|
||
|
COPY authorized_keys /root/.ssh/authorized_keys
|
||
|
# run blocking command which prevents container to exit immediately after start.
|
||
|
CMD service ssh start && tail -f /dev/null
|
||
|
EOF
|
||
|
docker build my-ubuntu -t my-ubuntu
|
||
|
}
|
||
|
start() {
|
||
|
testssh() {
|
||
|
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@"$1" echo "'$1'" '`uptime`'
|
||
|
}
|
||
|
export -f testssh
|
||
|
# Start the virtual servers
|
||
|
seq 100 |
|
||
|
parallel -j0 'docker run -d --rm --name my-ubuntu-{} my-ubuntu; docker inspect my-ubuntu-{}' |
|
||
|
# After this it is possible to do:
|
||
|
# ssh 10.0.0.99
|
||
|
# from another physical server
|
||
|
perl -nE '/"IPAddress": "(\S+)"/ and not $seen{$1}++ and say $1' |
|
||
|
parallel testssh
|
||
|
docker ps
|
||
|
}
|
||
|
stop() {
|
||
|
# Stop the virtual servers
|
||
|
# After there is no running processes on the host server
|
||
|
# and after this it is no longer possible to do:
|
||
|
# ssh 10.0.0.99
|
||
|
# from another physical server
|
||
|
# The host server returns to the state before running `start`
|
||
|
seq 100 | parallel -j0 docker stop my-ubuntu-{}
|
||
|
docker ps
|
||
|
}
|
||
|
destroy() {
|
||
|
# Remove the setup
|
||
|
# After this the host server returns to the state before running `setup`
|
||
|
rm -rf my-ubuntu/
|
||
|
docker rmi my-ubuntu
|
||
|
}
|
||
|
|
||
|
full() {
|
||
|
install
|
||
|
setup
|
||
|
start
|
||
|
stop
|
||
|
destroy
|
||
|
}
|