Browse Source

Minecraft in docker blog post

master
jrtechs 3 years ago
parent
commit
23e7951a41
2 changed files with 105 additions and 0 deletions
  1. BIN
      blogContent/headerImages/minecraft.png
  2. +105
    -0
      blogContent/posts/java/running-a-minecraft-server-with-docker.md

BIN
blogContent/headerImages/minecraft.png View File

Before After
Width: 1920  |  Height: 496  |  Size: 600 KiB

+ 105
- 0
blogContent/posts/java/running-a-minecraft-server-with-docker.md View File

@ -0,0 +1,105 @@
Close your eyes for one moment and imagine that everything you host runs in docker containers.
You no longer need to battle system dependencies, and configurations are more manageable; it is now easier to backup and transfer your applications.
In my quest to dockerize everything, I am now dockerizing my Minecraft server.
Minecraft is a relatively simple application to host since it is just a single Java application that you need to run.
To put this in Docker, we need to declare a Java Docker image that launches our Minecraft server.
```bash
FROM openjdk:8u232
WORKDIR /root/minecraft
CMD java -Xmx2048M -jar spigot-1.10.jar -o true
```
To make this Docker container work, we need to mount the volume containing our Minecraft files to the path "/root/minecraft" in our Docker container.
By mounting the volume, it enables us the persist the data between consecutive runs.
To orchestrate all of my Docker containers, I am using Docker-compose.
Although there is only one container for this instance, I can add additional services to this file; for example, If I had a website that went along with my server, I could use docker-compose to launch both the Minecraft server and the server's website.
```yaml
version: "2.2"
networks:
bridge-network:
external:
name: bridge-network
services:
minecraft:
restart: always
image: minecraft
build: ./minecraft-docker
networks:
- bridge-network
volumes:
- "./minecraft:/root/minecraft"
ports:
- "8123:8123"
- "25565:25565"
```
To expose the Minecraft server to the internet, we need to tell docker-compose the applications ports.
I am using a bridged docker network along with appending the ports in the docker-compose configuration file.
Port 25565 is the default Minecraft server port, and port 8123 gets used by Dynmap.
To create the network bridge, you need to run this command once.
```bash
docker network create -d bridge bridge-network
```
We need to execute the build command to generate our new Minecraft Docker container:
```bash
docker-compose build
```
To launch the server, we just run the compose-up command.
```bash
docker-compose up
```
One quick note on the file structure that I am employing for this project:
I like to keep the Dockerfiles in a directory separate from any volumes that I am mounting within those containers.
Additionally, it is a good practice to have your docker-compose file at the root directory.
```bash
╭─jeff@dangerous ~/Docker
╰─$ tree -L 2
.
├── docker-compose.yml
├── minecraft
│ ├── banned-ips.json
│ ├── banned-players.json
│ ├── bukkit.yml
│ ├── commands.yml
│ ├── crash-reports
│ ├── eula.txt
│ ├── logs
│ ├── ops.json
│ ├── permissions.yml
│ ├── plugins
│ ├── run.bat
│ ├── server-icon.png
│ ├── server.properties
│ ├── spigot-1.10.jar
│ ├── spigot.yml
│ ├── survival
├── minecraft-docker
│ └── Dockerfile
└── README.md
```
Docker will scan the entire director before building a project-- Docker does this so it knows what caches it can use during an incremental build.
To improve the build time, I add the Minecraft server folder to the docker-ignore file to prevent Docker from scanning all the world artifacts.
```bash
# .dockerignore file
minecraft
```

Loading…
Cancel
Save