iT邦幫忙

2022 iThome 鐵人賽

DAY 11
1
DevOps

前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記系列 第 11

Day 11 — 這絕對不是走私貨櫃:練習架設服務 - Minecraft Server in Docker

  • 分享至 

  • xImage
  •  

可愛鯨魚

就算樂高化還是很可愛的鯨魚~

圖片來源:Docker (@Docker) / Twitter

這篇先以 Docker 的環境下測試架設,下一篇會以 Kubernetes 環境來做些轉換,也可以藉此了解他們的差別

(本篇主要是在練習哦~真的想架設的可以用 社群版本的 image 在下方有一些補充)

架設服務

既然架好了 cluster 就要來測試一下對吧?
但我又不想用 hello world 來測試...
那就... Minecraft Server 吧! /images/emoticon/emoticon39.gif

這是絕對是研究用途!不用懷疑!

Image

首先要先製作 image ~
在 Docker 的生態下就要寫 Dockerfile,先簡單來寫一個當作練習吧!

Base Image

先來選一個 Base Image,我們將環境定為 linux, java,從 Docker Hub 上可以直接找到 openjdk 釋出的 image

選擇一個 tag,這裡使用 Debian 11 (bullseye) + java 18 為底的 image

docker pull openjdk:18.0.2-jdk-slim-bullseye

Test Image

如果想測試這個 image 可以直接使用上篇介紹的 Docker 延伸模組操作

openjdk 這個 image 預設是使用 jshell 啟動,如果要使用一般的 bash 還是要下指令哦!

docker run --rm -ti openjdk:18.0.2-jdk-slim-bullseye bash

Dockerfile

接著建立一個 Dockerfile

# 使用 openjdk 做為 base image
FROM openjdk:18.0.2-jdk-slim-bullseye

# 指定工作目錄
WORKDIR /minecraft-server/1.19.2

# 安裝 curl (後兩條是用來清除 apt cache)
RUN apt-get update
RUN apt-get -y install curl && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 新增 EULA 檔
RUN echo eula=true > eula.txt

# 從官網取得 Minecraft Server 檔案
RUN curl https://piston-data.mojang.com/v1/objects/f69c284232d7c7580bd89a5a4931c3581eae1378/server.jar -o server.jar

# 新增 Volume 確保 Server 資料保存
VOLUME [ "/minecraft-server/1.19.2" ]

# Minecraft Server 預設使用 25565 Port
EXPOSE 25565

# 啟動 container 時啟用 server
CMD [ "java", "-Xmx2048M", "-Xms1024M", "-jar", "server.jar", "nogui" ]

Build Image

再來要打包 Image

docker build -t mcs-test:1.0 .

以下是關於 Image Layer...

從 output 可以看到有9個 step
每個 RUN 都是一個 Image Layer,如果要更快速的 Build Image,要想想步驟的前後順序哦!

假如我現在改了 Expose port

...
...
# 測試改 Layer
EXPOSE 25566

# 啟動 container 時啟用 server
CMD [ "java", "-Xmx2048M", "-Xms1024M", "-jar", "server.jar", "nogui" ]

來看看 Build Image 會發生什麼事~

docker build -t mcs-test:1.1 .

前幾步的 Layer 會直接使用 cache 加速 Build 的時間~

Dockerfile 短短幾行哲學可多了~


Container

接著來用 Docker container 測試

docker run -d --name mcs -p 25565:25565 mcs-test:1.0

這會直接佔用主機的 25565 port
如果你的主機有額外的 ip 可以使用 --ip xx.xx.xx.xx 指定

可以看到 container 正在運行,也正在產生出對應的檔案

也產生新的 Volume

點 View Logs 查看目前進度

等待完成後使用 telnet 測試

telnet localhost 25565

成功~這樣就有一個 Minecraft Server 了


透過 Minecraft 學習 Docker 還不錯吧~ /images/emoticon/emoticon12.gif

我提供的只是單純以手動的方式安裝轉換成 Dockerfile,社群版本有提供更多功能,也可以透過看別人的 Dockerfile 學習更多技巧哦~

補充

如果真的想架設的話可以使用社群開發的版本哦!
Minecraft Sever 安裝教學 - Docker

提供一下指令參考~

docker run -d -it --name mcs \
    -v /home/mcs:/data \
    -p 25565:25565 \
    --ip <your_ip> \
    -e EULA="TRUE" \
    -e VERSION=1.19.2 \
    -e MEMORY=4G \
    -e TZ=Asia/Taipei \
    itzg/minecraft-server

如果要連接 Minecraft Server 的後台要使用特別的 cli

docker exec -i mcs rcon-cli

退出一樣使用 Ctrl + C 就可以了


Ref


明天先看看要怎麼轉換到 Kubernetes 上吧~
/images/emoticon/emoticon82.gif


上一篇
Day 10 — 遠端操控面板:vscode 實用延伸模組 (二)
下一篇
Day 12 — 艦隊通力合作搬運貨櫃:Docker 到 Kubernetes 轉換探討
系列文
前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言