My 11-year old son has been after me to get a Minecraft server setup locally that he could connect to and play off of any of the computers in the house. Fortunately for him, my home lab environment is running a few different Docker container hosts, and I figured loading up a couple servers via Docker would be the simplest solution. A quick search on Docker Hub yielded several results for Minecraft and after looking through the most popular options, I settled on the itzg/minecraft-server image.
I deployed a new Photon VM to act as the container host and after a slow 180 second install, I was pulling the image down to the host. I wanted to run a couple different options for him, so that he could choose what type of server to log into. I created a couple simple shell scripts to load the different server types.
cre-minecraft.sh
1 docker run -d -it \ 2 -e EULA=TRUE -e DIFFICULTY=normal -e VERSION=LATEST \ 3 -e MODE=creative -e PVP=false -e LEVEL_TYPE=LARGEBIOMES \ 4 -e 'JVM_OPTS=-Xmx4096M -Xms4096M' \ 5 -p 25566:25565 --name cre-minecraft \ 6 -v /opt/minecraft2:/data itzg/minecraft-server
adv-minecraft.sh
1 docker run -d -it \ 2 -e EULA=TRUE -e DIFFICULTY=normal -e VERSION=LATEST \ 3 -e MODE=adventure -e PVP=false -e LEVEL_TYPE=AMPLIFIED \ 4 -e 'JVM_OPTS=-Xmx8192M -Xms8192M' \ 5 -p 25565:25565 --name adv-minecraft \ 6 -v /opt/minecraft:/data itzg/minecraft-server
After that it was just a matter of starting both containers and checking that they were listening on the correct host ports.
The Docker Minecraft containers worked wonderfully this evening. He was excited to see that I was able to spin up as many servers as he wanted to run and that he could easily hop between them in his Minecraft client. It was a fun little experiment with Docker volumes for me as well — I had not used them yet — resulting in a very happy kid!