Docker로 Minecraft 서버 배포하기 #사전준비

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를 사용하도록 하겠습니다. 아래 페이지에 접속해 주세요.

Downloads – 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=falseeula=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-playersdifficulty같은 In-Game Config 정보는 기호에 맞게 수정하시되, server-ip같은 Network Config 정보는 그대로 두시면 됩니다.

여기까지 하셨으면 서버 설정은 끝났습니다. 수고하셨습니다!

Docker 설치

이제 Docker를 설치할 겁니다. 아래 공식 문서를 한글로 옮겼습니다.

Install Docker Engine on Ubuntu
Instructions for installing Docker Engine on Ubuntu

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로 빌드합니다.

다음 포스트

Docker로 Minecraft 서버 배포하기 #1 Build Image
재미있게 배우는 Docker#Dockerfile #DockerIgnore #Image #Build #Push #Pull #Container