Letní škola sítí
Průvodce vytvořením vlastního Docker image a kontejneru
server.jarstart.shDockerfiledocker-compose.ymlserver.jar a náš startovací skript.V terminálu vytvoříme novou složku pro náš Minecraft server:
# Vytvořit složku mc-server
mkdir mc-server
# Přepnout se do vytvořené složky
cd mc-server
server.jarStáhneme oficiální Java server a uložíme ho do složky mc-server:
minecraft.net/en-us/download/server.server.jar ve složce mc-server.
ls -lh server.jar
start.shStartovací skript zkontroluje souhlas s EULA a spustí Minecraft z adresáře /data:
nano start.sh
start.sh
#!/bin/sh
set -eu
if [ "${EULA:-FALSE}" != "TRUE" ]; then
echo "Server se nespustí: nastav EULA=TRUE v compose." >&2
exit 1
fi
mkdir -p /data
chown -R minecraft:minecraft /data 2>/dev/null || true
chmod 777 /data 2>/dev/null || true
printf 'eula=true\n' > /data/eula.txt
cd /data
exec su -s /bin/sh minecraft -c "exec java -Xms${MEMORY:-1G} -Xmx${MEMORY:-2G} -jar /opt/minecraft/server.jar nogui"
start.shAby mohl Linux skript spustit, dáme mu práva k vykonání:
chmod +x start.sh
DockerfileNyní napíšeme předpis (Dockerfile), ze kterého Docker vytvoří náš image:
nano Dockerfile
Dockerfile
FROM eclipse-temurin:26-jre
WORKDIR /opt/minecraft
COPY server.jar /opt/minecraft/server.jar
COPY start.sh /usr/local/bin/start-minecraft
RUN chmod +x /usr/local/bin/start-minecraft && \
useradd --create-home minecraft && \
mkdir -p /data && \
chown -R minecraft:minecraft /opt/minecraft /data
EXPOSE 25565
VOLUME ["/data"]
ENTRYPOINT ["start-minecraft"]
FROM - Základní image s Java Runtime Environment (Temurin Java 26).COPY - Zkopíruje server.jar a start.sh do kontejneru.RUN - Nastaví práva a vytvoří neprivilegovaného uživatele minecraft.EXPOSE 25565 - Deklaruje síťový port hry.ENTRYPOINT - Spustí náš skript, který opraví vlastnictví složky /data a spustí Minecraft pod neprivilegovaným uživatelem.docker-compose.yml?Dockerfile, porty, paměť a trvalá data.Otevřeme editor nano pro docker-compose.yml:
nano docker-compose.yml
docker-compose.yml
services:
mc-server:
build:
context: .
dockerfile: Dockerfile
image: muj-minecraft:1.20.4
container_name: lss-minecraft-server
ports:
- "25565:25565"
environment:
EULA: "TRUE"
MEMORY: "2G"
volumes:
- ./data:/data
restart: unless-stopped
EULA: "TRUE" - Souhlas s licenčními podmínkami Mojangu. Skript start.sh ho zkontroluje a zapíše do eula.txt.MEMORY: "2G" - Předá parametr RAM pro Java proces (max 2 GB).build: context: . - Říká Compose, aby sestavil image z Dockerfile v aktuální složce.
ports:
- "25565:25565"
volumes:
- ./data:/data
./data na vašem počítači se složkou /data v kontejneru../data?world/ - Soubory mapy a terénu.server.properties - Hlavní nastavení serveru.ops.json - Seznam administrátorů serveru.upNejprve sestavíme náš image z Dockerfile a pak vytvoříme kontejner:
# 1. Sestavit vlastní image
docker compose build
# 2. Spustit kontejner na pozadí
docker compose up -d
-d?Generování světa a start Javy sledujeme v reálném čase:
docker compose logs -f
Sledování ukončíme stiskem kláves Ctrl + C.
V logu se objeví řádek potvrzující dokončení načítání světa:
[Server thread/INFO]: Done (18.421s)! For help, type "help"
localhost.docker attach lss-minecraft-server.Připojte se ke konzoli kontejneru a zadejte příkaz:
# Připojit se ke konzoli
docker attach lss-minecraft-server
# Uvnitř konzole zadat:
op student
Nahraďte student vaším herním jménem. Odpojení: Ctrl + P pak Ctrl + Q.
# Nastavení dne ve hře (v konzoli nepíšeme lomítko /)
time set day
# Změna herního módu na Creative pro hráče student
gamemode creative student
./data/server.properties v nano.pvp=false nebo motd=Vitej na serveru!).Aby se změny v server.properties projevily, restartujeme kontejner:
docker compose restart
Všechna data jsou ve složce ./data, stačí ji zabalit:
tar -czvf zaloha-mc.tar.gz ./data
# 1. Zastavit server
docker compose down
# 2. Obnovit složku data ze zálohy
tar -xzvf zaloha-mc.tar.gz
# 3. Opět spustit server
docker compose up -d
~/muj-mc-server.server.jar.start.sh a nastavte spustitelná práva (`chmod +x`).Dockerfile podle předlohy.docker-compose.yml.localhost a dejte si admin práva (`op`).start.sh, Dockerfile a docker-compose.yml../data.