Sometimes we want to quickly run some container and check http connection to it, I use to use nginx for this.
If your internet connection is not super fast, or if you want something really really quick, or nginx just doesn’t work for you
for some reason, here is what you can use – a combination of busybox and netcat:
➜ ~ docker run -d --rm -p 8080:8080 --name webserver busybox \ sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \ echo 'smallest http server'; } | nc -l -p 8080; done" 031cb2f4c0ecab22b3af574ab09a28dbfcb9e654e9a2d04fb421bb7ebacdff1f ➜ ~ curl localhost:8080 smallest http server
Lets check it’s size:
➜ ~ docker images nginx | grep alpine nginx 1.13.6-alpine 5c6da346e3d6 3 weeks ago 15.5MB ➜ ~ ➜ ~ ➜ ~ docker images busybox REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 6ad733544a63 3 weeks ago 1.13MB ➜ ~
It is just 1Mb as oppose to 15Mb for nginx alpine.
You can run same on Kubernetes as described below:
➜ ~ kubectl run busybox --image=busybox --port 8080 \ -- sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \ echo 'smallest http server'; } | nc -l -p 8080; done" deployment "busybox" created ➜ ~ kubectl expose deployment busybox --type=NodePort service "busybox" exposed ➜ ~ minikube service busybox --url http://192.168.99.100:32301 ➜ ~ curl http://192.168.99.100:32301 smallest http server ➜ ~