Files

268 lines
6.9 KiB
Markdown
Raw Permalink Normal View History

2022-05-24 12:08:01 +01:00
---
title: Minecraft Server on Docker ⛏ 🐳
2024-11-29 02:26:53 +00:00
description: Ever wanted to build a Minecraft server in docker !! Start here
tags:
- docker
- games
author: ahmza
date: 2022-05-24
2022-05-27 12:37:52 +01:00
draft: false
2024-01-05 23:54:51 +00:00
weight:
2024-11-29 02:26:53 +00:00
featureimage: feature.webp
lastmod: 2024-07-20
2022-05-24 12:08:01 +01:00
---
2024-09-14 15:33:46 +01:00
## Introduction
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
Minecraft is a great game that becomes even more enjoyable when played with
friends. One of the best ways to do this is by setting up a dedicated server.
This guide will help you do just that!
2022-05-24 12:08:01 +01:00
2024-09-14 15:33:46 +01:00
Setting up and running a Minecraft server does not require a lot of resources,
but based on my experience, allocating more resources significantly enhances
performance, especially when you start to add mods and increase player count.
2022-05-24 12:08:01 +01:00
2024-09-14 15:33:46 +01:00
## Prerequisites
2024-11-29 02:26:53 +00:00
2022-05-27 12:37:52 +01:00
- Docker
- Docker Compose
2024-09-14 15:33:46 +01:00
For more information about my Docker setup, see [Pi Cluster](/posts/pi-docker-swarm/)
## Requirements
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
_Requirements Gathered from [here](https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29)_
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
### Minimum (1-5 Players)
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
```
2022-05-27 12:37:52 +01:00
- Intel Pentium 4 or AMD Athlon based CPU
- 512 MB RAM
- 2 GB Storage space
2024-09-14 15:33:46 +01:00
```
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
### Recommended (10-15 Players)
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
```
2022-05-27 12:37:52 +01:00
- Intel Core or AMD K8 based CPU
- 3 GB RAM
- 16 GB Storage Space
2024-09-14 15:33:46 +01:00
```
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
### Optimal (20+ Players)
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
```
2022-05-27 12:37:52 +01:00
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM
- 35 GB Storage Space
2024-09-14 15:33:46 +01:00
```
**My opinion:**
I personally went with the optimal settings as I wanted to run mods as well as
have the capacity for ~10 players. This gives the server breathing room.
However, if you will be running no mods or only a few lightweight mods and only
a few players, there is no need to go higher than 3-4 GB.
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
## Building the Container
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
Let's get started on building the Minecraft server.
2024-01-05 23:54:51 +00:00
2024-09-14 15:33:46 +01:00
1. **Create a directory for the Minecraft server files:**
2024-11-29 02:26:53 +00:00
2024-01-05 23:54:51 +00:00
```bash
# Make the folder
mkdir minecraft-server
2024-09-14 15:33:46 +01:00
# Enter the folder
2024-01-05 23:54:51 +00:00
cd minecraft-server
```
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
2. **Create an environment file for the Docker Container:**
- The `.env` file allows us to specify variables used in the build process.
2024-11-29 02:26:53 +00:00
2024-01-05 23:54:51 +00:00
```bash
# Create a .env file
touch .env
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
2024-09-14 15:33:46 +01:00
SERVER_MEM=4096 # Change this to your desired value (in MB)
SERVER_JAR=<downloaded-server-file>.jar # Minecraft server jar file. Change this later
2024-01-05 23:54:51 +00:00
```
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
3. **Create the `docker-compose.yml` file:**
2024-11-29 02:26:53 +00:00
2024-01-05 23:54:51 +00:00
```bash
# Create the file
2024-09-14 15:33:46 +01:00
touch docker-compose.yml
2024-01-05 23:54:51 +00:00
# Open in a text editor
vim docker-compose.yml
```
2024-09-14 15:33:46 +01:00
- `docker-compose.yml` specifies the configuration of our Minecraft server:
2024-11-29 02:26:53 +00:00
- Build a Docker image using the current context and pass some arguments.
- Attach the volume .server-data where Minecraft's files will be stored.
- Open network ports to access the Docker container.
- Name the Docker container.
- Ensure the container always restarts unless explicitly stopped.
2024-01-05 23:54:51 +00:00
2024-09-14 15:33:46 +01:00
```yaml
2024-01-05 23:54:51 +00:00
services:
minecraft-server:
build:
context: .
args:
SERVER_MEM: ${SERVER_MEM}
SERVER_JAR: ${SERVER_JAR}
volumes:
- .server-data:/server
ports:
2024-09-14 15:33:46 +01:00
- 25565:25565 # Game
- 25575:25575 # RCON
2024-01-05 23:54:51 +00:00
container_name: ${CONTAINER_NAME}
restart: unless-stopped
volumes:
server-data:
```
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
4. **Create the `Dockerfile`:**
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
- Referenced in the `docker-compose.yml` build stage as context `.`.
- The `Dockerfile` specifies the software running inside the container.
2022-05-27 12:37:52 +01:00
2024-01-05 23:54:51 +00:00
```bash
# Create the file
2024-09-14 15:33:46 +01:00
touch Dockerfile
2024-01-05 23:54:51 +00:00
# Open the file in a text editor
vim Dockerfile
```
2024-09-14 15:33:46 +01:00
- Use the [eclipse-temurin:21](https://hub.docker.com/_/eclipse-temurin) image to provide the Java JRE
2024-11-29 02:26:53 +00:00
- Use the required Java version for the version of Minecraft you are running.
2024-09-14 15:33:46 +01:00
- Collect the arguments from the .env file.
- Set the environment variables.
- Set the working directory to /server, on our local system is .server-data.
- Run the Minecraft server jar with the environment variables.
2024-01-05 23:54:51 +00:00
```Dockerfile
2024-09-14 15:33:46 +01:00
FROM eclipse-temurin:21
2022-05-27 12:37:52 +01:00
2024-01-05 23:54:51 +00:00
ARG SERVER_MEM
ARG SERVER_JAR
2022-05-27 12:37:52 +01:00
2024-01-05 23:54:51 +00:00
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
```
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
## Setup the Server Files
2022-05-27 12:37:52 +01:00
2024-11-29 02:26:53 +00:00
We're almost there, just a few steps to go.
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
When you try to start the container, you might encounter the following error:
2022-05-27 12:37:52 +01:00
```bash
Minecraft Server is starting
Error: Unable to access jarfile server.jar
```
2024-09-14 15:33:46 +01:00
This happens because we haven't downloaded the server jar file yet. Let's do that now.
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
1. **Create a folder in the `minecraft-server` directory called `.server-data`:**
2024-01-05 23:54:51 +00:00
```bash
mkdir .server-data
cd .server-data
```
2024-09-14 15:33:46 +01:00
2. **Download a Minecraft server jar file:**
- [Vanilla Minecraft Server](https://www.minecraft.net/en-us/download/server)
- Right-click the green link that says `minecraft_server.<version>.jar` and copy the link address.
- Download with: `curl -o server.jar <link you copied here>`
2024-09-14 15:33:46 +01:00
- [Fabric Mod loader server](https://fabricmc.net/use/server/)
2024-11-29 02:26:53 +00:00
- Select the Minecraft version, Fabric Loader Version, and the Installer Version of your choice. I tend to go with the latest.
- Download with: Copy the curl command under CLI download
2024-01-05 23:54:51 +00:00
2024-09-14 15:33:46 +01:00
3. **Go back to the root `minecraft-server` directory:**
2024-11-29 02:26:53 +00:00
2024-01-05 23:54:51 +00:00
```bash
cd ..
```
2024-09-14 15:33:46 +01:00
4. **Edit `SERVER_JAR in` `.env` with the name of the server file you just downloaded:**
2022-05-27 12:37:52 +01:00
2024-01-05 23:54:51 +00:00
```bash
2024-09-14 15:33:46 +01:00
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096
SERVER_JAR=<downloaded-server-file>.jar # Change this to the name of the .jar you downloaded
2024-01-05 23:54:51 +00:00
```
2024-09-14 15:33:46 +01:00
5. **Run the container to generate necessary files like `eula.txt`:**
2024-11-29 02:26:53 +00:00
2024-01-05 23:54:51 +00:00
```bash
2024-09-14 15:33:46 +01:00
docker compose up
```
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
You will see something like this:
2024-11-29 02:26:53 +00:00
2024-09-14 15:33:46 +01:00
```bash
2024-01-05 23:54:51 +00:00
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
```
2024-09-14 15:33:46 +01:00
6. **Accept the EULA:**
2024-01-05 23:54:51 +00:00
```bash
2024-09-14 15:33:46 +01:00
# Edit eula.txt in a text editor
vim .server-data/eula.txt
# Change `eula=false` to `eula=true`
2024-01-05 23:54:51 +00:00
eula=true
```
2024-09-14 15:33:46 +01:00
7. **Make any additional changes you want:**
- Notable files:
2024-11-29 02:26:53 +00:00
- server.properties - Configure server name, game mode, world type, etc.
- ops.json - Server operators (can be set in-game).
- whitelist.json - Players allowed to join the server (can be set in-game).
2024-01-05 23:54:51 +00:00
2024-09-14 15:33:46 +01:00
## Run the Server
2024-01-05 23:54:51 +00:00
2024-09-14 15:33:46 +01:00
**Run the container in detached mode:**
2024-01-05 23:54:51 +00:00
```bash
2024-09-14 15:33:46 +01:00
# The -d flag allows the container to run in detached mode, i.e., in the background
2024-01-05 23:54:51 +00:00
docker compose up -d
```
2024-09-14 15:33:46 +01:00
**To monitor the logs as the server starts:**
2024-01-05 23:54:51 +00:00
```bash
2024-09-14 15:33:46 +01:00
# Monitor the logs as the server starts. Use CTRL+C to exit
2024-01-05 23:54:51 +00:00
docker logs minecraft-server --follow
2024-09-14 15:33:46 +01:00
# If you see the following lines, 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"
2024-01-05 23:54:51 +00:00
```
## Conclusion
2024-09-14 15:33:46 +01:00
Congratulations! You've successfully set up a Minecraft server. Now it's time
to play!
2022-05-27 12:37:52 +01:00
2024-09-14 15:33:46 +01:00
There are many exciting possibilities from here, such as installing mods or
creating scripts to manage the server. Enjoy your Minecraft adventures!