6.5 KiB
title, date, author, draft, weight, tags, description, canonicalURL, cover, showtoc, searchHidden
| title | date | author | draft | weight | tags | description | canonicalURL | cover | showtoc | searchHidden | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Minecraft Server on Docker ⛏ 🐳 | 2022-05-24T09:33:35+01:00 | ahmza | false |
|
Ever wanted to build a Minecraft server in docker !! Start here | https://blog.ahmza.com/Page%28/posts/minecraft-server-on-docker.md%29 |
|
true | false |
Introduction
Minecraft is a great game and better with friends. A dedicated server allows you to do that1 .
A Minecraft server does not require a ton of resources to run, but from my experience the more resources you can throw at it the better when you start to introduce mods and more players.
I run our server on my main PC. This allows me to leverage the system resources in my PC 🦾 leaving the Pi Cluster system resources to handle the rest of the stuff in my lab.
Prerequisites
- Docker
- Docker Compose
Requirements2
Minimum (1-5 Players)
- Intel Pentium 4 or AMD Athlon based CPU
- 512 MB RAM
- 2 GB Storage space
Recommended (10-15 Players)
- Intel Core or AMD K8 based CPU
- 3 GB RAM
- 16 GB Storage Space
Optimal (20+ Players)
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM
- 35 GB Storage Space
Building the Container
- Create a directory in which you will keep the Minecraft server files
# Make the folder
mkdir minecraft-server
# Ender the folder
cd minecraft-server
- Create an environment file to be used by the Docker Container
- The .env file allows us to specify variables used in the build process.
# Create a .env file
touch .env
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB)
SERVER_JAR=minecraft_server.<version>.jar # change the version
- Create the docker-compose.yml file
- The docker-compose.yml file specifies the container that we want to build 3
# Create the file
touch docker-compose.yml`
# Open in a text editor
vim docker-compose.yml
version: "3"
services:
minecraft-server:
build:
context: .
args:
SERVER_MEM: ${SERVER_MEM}
SERVER_JAR: ${SERVER_JAR}
volumes:
- .server-data:/server
ports:
- 25565:25565
- 25575:25575
container_name: ${CONTAINER_NAME}
restart: unless-stopped
volumes:
server-data:
-
Create the Dockerfile file
- The Dockerfile builds the container image.
# Create the file
touch Dockerfile`
# Open the file in a text editor
vim Dockerfile
FROM eclipse-temurin:17-jre
ARG SERVER_MEM
ARG SERVER_JAR
ENV SERVER_MEM=${SERVER_MEM}
ENV SERVER_JAR=${SERVER_JAR}
WORKDIR /server
CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui
Setup the Server files
We’re almost there, just a few steps left !!
The curious among you may have realised when trying to start the container that it fails with the error below:
Minecraft Server is starting
Error: Unable to access jarfile server.jar
This is because we have not downloaded the server jar file yet, that is our next step.
- Navigate to one of the following sites:4
- Vanilla Minecraft Server - instructions found here5
- Fabric Mod loader server - instructions found here 6
- Create a folder in the Minecraft-server folder called .server-data
mkdir .server-data
cd .server-data
- Download the jar file - This will depend on the option above so read the instructions
- Go back to the root minecraft-server folder
cd ..
- Run the container This will create our eula.txt as well as other files needed.
docker compose up # use CTRL+C to exit
minecraft-server | Starting net.minecraft.server.Main
minecraft-server | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
minecraft-server exited with code 0
- Accept the EULA
# enter the .server-data folder
cd .server-data
# edit eula.txt in a text editor
vim eula.txt
# change `eula=false` to `eula=true`
eula=true
-
While in the .server-data folder make any changes you want
- Notable files:
- server.properties - properties like server name, game mode, world type etc…
- ops.json - list of server operators (easier to set ingame)
- whitelist.json - list of players allowed to join the server everyone else rejected access.
- Notable files:
-
Run the container
# -d flag allows the container to run in detached mode i.e in the background
docker compose up -d
# monitor the logs as the server starts. CTRL+C to exit
docker logs minecraft-server --follow
# If you see the bottom line then your server is up and running
[18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms
[18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help"
Conclusion
Well done you have setup a Minecraft server, now go play !!
There is a lot of cool stuff you can do from this point, for example installing mods or creating scripts to manage the server.
-
Hosting your own dedicated server allows you to modify every aspect of the server as you see fit. I.E you can modify the server-properties, you can implement a whitelist not to mention being able to add any mods you want ↩︎
-
Requirements Gathered from here https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29 ↩︎
-
Yaml is very picky 😞 when it comes to formatting so if you encounter any errors double check your formatting !! ↩︎
-
I have left Forge out as it is a more involved process plus Fabric is better 😜 ↩︎
-
Right click the green link that says something like minecraft_server.x.xx.x.jar and copy the link address
curl -o server.jar \<link you copied here\>↩︎ -
Select the Minecraft version, Fabric Loader Version and the Installer Version of your choice. I tend to go with the latest.
Copy the curl command under CLI download↩︎