Kurz mal die neuste Version einer Software, eines Pakets, einer Library installieren und testen? Keine Lust extra eine VM dafür zu konfigurieren?
Nimm Docker.
Voraussetzung
– Docker ist installiert und konfiguriert
– das Beispiel läuft in dieser Form nur auf einem OS mit Linux Kernel
Vorbereitungen
Es wird nun ein Folder erstellt mit allen für das Docker-Image relevanten Daten. Das Testscript main.sh dient nur dazu, den Container in einer Endlosschlaufe zu halten, um sich später zum Container connecten zu können.
mkdir $HOME/lab
Anlegen eines Testscripts für die Endlosschlaufe
cd $HOME/lab
cat << 'EOF' > main.sh
#!/bin/bash
if [ "$1" = "-loop" ]
then
while true
do
echo `date` >> /var/lab/date.txt
sleep 10
done
else
echo "-loop : container runs in a loop"
fi
EOF
chmod 755 main.sh
Falls Daten in das Docker Image müssen, diese nun in den Folder $HOME/lab kopieren.
Nun wird das Dockerfile angelegt:
cd $HOME/lab
cat << 'EOF' > dockerfile
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
curl \
&& mkdir -p /opt/lab \
&& mkdir -p /var/lab
EXPOSE 80 443
VOLUME ["/var/lab"]
COPY . /opt/lab/
WORKDIR /opt/lab/
ENTRYPOINT ["./main.sh"]
CMD ["-h"]
EOF
Docker Image erstellen und Container erzeugen
Nun wird das eigentliche Image gebildet und der Container erzeugt:
cd $HOME/lab
sudo docker build -t mylab .
sudo docker run -d mylab -loop
CONTAINER=`sudo docker ps| grep mylab | head -n1 |awk {'print $NF}'`
Container connecten
Ob der Container läuft kann mit “sudo docker ps | grep mylab” überprüft werden. Es sollte ein Container am laufen sein:
sudo docker ps | grep $CONTAINER
2aa0bb61c474 mylab <snip> 80/tcp, 443/tcp lucid_taussig
Nun kann der Container connected werden und eine interaktive Shell startet:
sudo docker exec -it $CONTAINER /bin/bash
Container stop und restart
Der container kann nach Gebrauch gestoppt werden:
sudo docker stop $CONTAINER
Wenn das Express-Lab nochmals gestartet werden soll, dann einfach:
sudo docker start $CONTAINER
sudo docker exec -it $CONTAINER /bin/bash
Have Fun!