Docker로 Minecraft 서버 배포하기 #사전준비
재미있게 배우는 Docker #Java #마인크래프트 #서버 #버킷 #PaperMC #Docker
Docker가 뭔데요?
잘 설명되어 있는 글이 있어서 해당 포스트 링크로 대체하겠습니다.
준비물
- Docker가 실행될 서버 환경
본 포스트는 Ubuntu 22.04 LTS를 사용합니다. - Ubuntu의 기초적 이해
기초적인 명령어 설명은 생략하겠습니다. 그래도 가능한 한 쉽게 설명하도록 노력했습니다. 궁금한 사항은 메일, 댓글 혹인 구글링을 통해 해결해 주세요. - 굳이 여기에 Docker를 써야겠다는 굳은 의지
이런 경우 본 포스트는 스킵하세요
- 이미 접속 가능한 Minecraft 서버가 있다.
- 서버를 운영할 기기에 Docker Engine이 설치되어 실행 중이다.
사전 준비
작업 영역 준비
Ubuntu 서버에서 작업할 공간을 만들어 줍시다. 저는 ubuntu 계정으로, 경로는 /home/ubuntu/dev/mcdocker/
디렉토리에서 작업하겠습니다. 다음과 같은 상태에서 시작하겠습니다.
$ pwd
/home/ubuntu/dev/mcdocker
시작하기 전에, 패키지 매니저를 업데이트해 줍시다.
$ sudo apt update
Minecraft 서버 구축
Java 설치
서버 버전에 따라 설치해야 할 Java 버전이 다릅니다. 다음은 2022년 10월 기준입니다. 특정 버전 이상이라고 써 있지만 웬만하면 해당 버전 설치하면 됩니다.
1,0.0 ~ 1.16.X | Java SE 8 |
1.17.X | Java 16 이상 |
1.18.X~ | Java 17 이상 |
저는 마인크래프트 1.19.2 버전을 사용할 것이므로, Java 17을 설치하겠습니다.
$ sudo apt install openjdk-17-jre
다음 명령어 결과가 정상적으로 출력되면 설치 성공입니다.
$ java -version
openjdk version "17.0.4" 2022-07-19
OpenJDK Runtime Environment (build 17.0.4+8-Ubuntu-122.04)
OpenJDK 64-Bit Server VM (build 17.0.4+8-Ubuntu-122.04, mixed mode, sharing)
버킷 다운로드
여기서는 PaperMC를 사용하도록 하겠습니다. 아래 페이지에 접속해 주세요.
#숫자
버튼이 다운로드 버튼입니다. 버튼 하나당 PaperMC Git Repository의 Commit에 해당하며 숫자가 클수록 최신 버전입니다. 특별히 원하는 버전이 있는 게 아니라면, 최신 버전을 사용하시면 됩니다. 우클릭하여 링크를 복사합니다. Minecraft 구버전용 서버 설치하려면 페이지 최하단의 LEGACY
를 클릭하여 이동한 뒤 원하는 버전을 선택하고 위와 같이 진행합시다.
서버로 가 봅시다. 서버 파일이 담길 디렉토리를 만들고 해당 디렉토리로 이동해 주세요. 저는 다음과 같이 진행하겠습니다.
$ mkdir server
$ cd server
$ pwd
/home/ubuntu/dev/mcdocker/server
복사한 링크를 가지고 다음과 같이 입력해 주세요.
$ wget [복사한 링크]
예를 들자면 다음과 같이 됩니다. 링크가 너무 길어 ...로 중략했습니다.
$ wget https://api.pap ... er-1.19.2-196.jar
실행하시면 server
디렉토리에 PaperMC 버킷이 다운로드됩니다.
$ wget https://api.pap ... er-1.19.2-196.jar
--2022-10-07 20:41:18-- https://api.papermc.io/v2/projects/paper/versions/1.19.2/builds/196/downloads/paper-1.19.2-196.jar
Resolving api.papermc.io (api.papermc.io)... 104.26.12.138, 172.67.72.198, 104.26.13.138, ...
Connecting to api.papermc.io (api.papermc.io)|104.26.12.138|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38306145 (37M) [application/java-archive]
Saving to: ‘paper-1.19.2-196.jar’
paper-1.19.2-196.jar
100% ===============>] 36.53M 52.9MB/s in 0.7s
2022-10-07 20:41:19 (52.9 MB/s) - ‘paper-1.19.2-196.jar’ saved [38306145/38306145]
$ ls -l
total 37412
-rw-rw-r-- 1 ubuntu ubuntu 38306145 Oct 5 13:44 paper-1.19.2-196.jar
PaperMC 실행
파일에 실행 권한이 없으므로 chmod
를 사용해 실행 가능하도록 조정하고 실행합시다. 다음과 같이 오류를 출력하며 프로세스가 금방 끝납니다.
$ chmod 731 paper-1.19.2-196.jar
$ java -jar paper-1.19.2-196.jar
Downloading mojang_1.19.2.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.4+8-Ubuntu-122.04) Host: Linux 5.15.0-1018-oracle (aarch64)
Loading libraries, please wait...
[23:06:19 INFO]: Building unoptimized datafixer
[23:06:21 ERROR]: Failed to load properties from file: server.properties
[23:06:21 WARN]: Failed to load eula.txt
[23:06:21 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
이는 약관 동의를 위한 절차입니다. 현재 server
디렉터리는 다음과 같은 상태입니다.
$ ls -l
total 37436
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 7 23:06 cache
-rw-rw-r-- 1 ubuntu ubuntu 158 Oct 7 23:06 eula.txt
drwxrwxr-x 12 ubuntu ubuntu 4096 Oct 7 23:06 libraries
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 7 23:06 logs
-rwx-wx--x 1 ubuntu ubuntu 38306145 Oct 5 13:44 paper-1.19.2-196.jar
-rw-rw-r-- 1 ubuntu ubuntu 1250 Oct 7 23:06 server.properties
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 7 23:06 versions
vim, emacs 등 사용하시는 에디터로 eula.txt
를 수정합시다.
eula=false
를 eula=true
로 수정하면 됩니다. 수정했으면 버킷을 다시 실행하고 기다립니다.
$ java -jar paper-1.19.2-196.jar
다음 내용까지 출력됐으면 월드 생성이 완료된 겁니다.
$ java -jar paper-1.19.2-196.jar
Starting org.bukkit.craftbukkit.Main
System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.4+8-Ubuntu-122.04) Host: Linux 5.15.0-1018-oracle (aarch64)
Loading libraries, please wait...
...
[23:16:05 INFO]: Done (19.342s)! For help, type "help"
[23:16:05 INFO]: Timings Reset
여기까지 됐으면 stop
으로 서버를 저장하고 종료합니다. server
디렉토리는 다음과 같은 상태입니다.
$ ls -l
total 37496
-rw-rw-r-- 1 ubuntu ubuntu 2 Oct 7 23:15 banned-ips.json
-rw-rw-r-- 1 ubuntu ubuntu 2 Oct 7 23:15 banned-players.json
-rw-rw-r-- 1 ubuntu ubuntu 697 Oct 7 23:15 bukkit.yml
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 7 23:06 cache
-rw-rw-r-- 1 ubuntu ubuntu 104 Oct 7 23:15 commands.yml
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 7 23:15 config
-rw-rw-r-- 1 ubuntu ubuntu 157 Oct 7 23:15 eula.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 7 23:15 help.yml
drwxrwxr-x 12 ubuntu ubuntu 4096 Oct 7 23:06 libraries
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 7 23:15 logs
-rw-rw-r-- 1 ubuntu ubuntu 2 Oct 7 23:15 ops.json
-rwx-wx--x 1 ubuntu ubuntu 38306145 Oct 5 13:44 paper-1.19.2-196.jar
-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 7 23:15 permissions.yml
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 7 23:15 plugins
-rw-rw-r-- 1 ubuntu ubuntu 1250 Oct 7 23:15 server.properties
-rw-rw-r-- 1 ubuntu ubuntu 4609 Oct 7 23:16 spigot.yml
-rw-rw-r-- 1 ubuntu ubuntu 2 Oct 7 23:15 usercache.json
-rw-rw-r-- 1 ubuntu ubuntu 47 Oct 7 23:15 version_history.json
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 7 23:06 versions
-rw-rw-r-- 1 ubuntu ubuntu 2 Oct 7 23:15 whitelist.json
drwxrwxr-x 8 ubuntu ubuntu 4096 Oct 7 23:18 world
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 7 23:18 world_nether
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 7 23:18 world_the_end
Server Properties 수정
server.properties
파일을 수정할 겁니다. max-players
나 difficulty
같은 In-Game Config 정보는 기호에 맞게 수정하시되, server-ip
같은 Network Config 정보는 그대로 두시면 됩니다.
여기까지 하셨으면 서버 설정은 끝났습니다. 수고하셨습니다!
Docker 설치
이제 Docker를 설치할 겁니다. 아래 공식 문서를 한글로 옮겼습니다.
Docker 사용에 필요한 패키지들을 설치합니다.
$ sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Docker 설치를 위해 Repository를 등록해 줍니다. 각각 GPG Key 등록과 이를 사용해 Repository를 등록하는 과정입니다.
$ sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
이제 Docker Engine을 설치합니다.
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
위 과정이 끝나면 설치는 끝났습니다. Docker 서비스를 실행하기만 하면 끝입니다.
$ sudo service docker start
docker 그룹에 사용자 추가(권장)
docker 그룹에 속해 있지 않은 사용자가 도커 명령어를 사용하려면 항상 sudo
를 붙여야 합니다. 번거롭기도 하고, sudo
없이 실행하면 권한 오류가 떠서 매번 아차 싶습니다. 이런 경우를 방지하기 위해 사용자를 docker 그룹에 추가합니다. 간단하게, 다음 명령어를 실행하면 됩니다.
$ sudo useradd -aG docker [사용자명]
마치며
사전 준비 과정이 꽤나 번거롭습니다. 다음 포스트에서는 여기서 구축한 서버를 Docker Image로 빌드합니다.