기술 자료

지원

Multiplay Hosting

Multiplay Hosting

컨테이너 빌드

Learn how to package your game server as a Docker container image for deployment.
읽는 시간 2분최근 업데이트: 21일 전

컨테이너는 소프트웨어와 모든 종속 관계를 하나의 단위로 패킹하는 방법입니다. Multiplay Hosting 컨테이너 빌드를 사용하면 게임 서버와 그 종속 관계를 패키징하고 컨테이너를 빌드한 다음 Multiplay Hosting 컨테이너 레지스트리에 푸시할 수 있습니다. 빌드를 생성할 때 컨테이너 이미지를 선택하면 Unity Dashboard에서 컨테이너 빌드를 생성할 수 있습니다. 빌드 생성 마법사를 따라 서비스 계정을 추가하고, 레지스트리를 추가하고, 이미지를 선택하면 됩니다. 컨테이너 이미지로 빌드 만들기를 참조하십시오. Multiplay Hosting은
<ImageName>:<ImageTag>
포맷의 Docker 컨테이너 태그를 사용합니다. Multiplay Hosting은 빌드에 적절한 이름과 태그를 생성하여 컨테이너 빌드를 생성하거나 업데이트할 때 이를 Unity Dashboard에 표시합니다.
docker tag <ImageName>:<ImageTag> registry.multiplay.com/4818982f-bb28-4c39-9d44-628204b6780e/1ae4de65-849d-4ff1-86fc-1de3bdfbd891/12788:v1

컨테이너 빌드 요구 사항

Multiplay Hosting 빌드를 생성할 때 여러 방법으로 빌드 파일을 업로드할 수 있습니다. 한 가지 방법은 Docker와 Multiplay Hosting 컨테이너 레지스트리를 사용하여 빌드의 컨테이너화된 버전을 업로드하는 것입니다. 하지만 컨테이너화된 빌드를 사용하려면 빌드 컨테이너가 일반적인 요구 사항 외에도 특정 요구 사항을 충족해야 합니다.

기본 이미지로 빌드된 컨테이너 생성

linux-build-image 템플릿 컨테이너는 컨테이너 빌드 사용과 관련된 대부분의 추가 요구 사항을 처리합니다. 이 컨테이너는 Dockerfile 상단에
FROM unitymultiplay/linux-base-image:<tag>
를 추가하여 사용할 수 있으며, 아래 코드에서 예제를 확인할 수 있습니다. 자세한 내용은 Dockerfile 참조(Docker 기술 자료)를 참고하십시오.
FROM unitymultiplay/linux-base-image:<tag># copy game files here##copy-game-files-here# for example:##for-example:WORKDIR /gameCOPY --chown=mpukgame . .# set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./gamebinary" ]
위 예제에서 다음을 수행할 수 있습니다.
  • <tag>
    를 사용할 기본 이미지 버전으로 변경하면 됩니다. 사용할 수 있는 태그 목록은 linux-base-image 태그에서 확인할 수 있습니다.
  • WORKDIR
    을 컨테이너 프로세스의 현재 작업 디렉토리로 설정합니다. 프로세스를 실행하거나 파일을 복사하는 모든 작업은 작업 디렉토리와 관련이 있습니다.
  • ENTRYPOINT
    를 컨테이너가 시작될 때 실행되는 실행 파일로 설정합니다. 이 엔트리포인트는 게임 서버 바이너리여야 합니다.
간단한 예제는 Simple Game Server Dockerfile을 참고하십시오(GitHub의 Unity Multiplay 예제).

컨테이너 빌드 직접 생성

Dockerfile 파일을 직접 생성하려는 경우, 사용자가 직접 컨테이너가 다음 요구 사항을 충족하는지 확인해야 합니다.
요구 사항설명
USER mpukgame
컨테이너가
mpukgame
USER
로 사용해야 합니다. 이 사용자는 GID(그룹 식별자)와 UID(사용자 식별자)가 모두 2000이어야 합니다.
ENTRYPOINT
컨테이너에
ENTRYPOINT
가 있어야 합니다.
다음 코드 블록은 이러한 요구 사항을 충족하는 간단한 Dockerfile입니다.
# ========================================================##========================================================-# Unity base image stuff##unity-base-image-stuff------------------# ========================================================##========================================================-FROM ubuntu:20.04 AS mpukRUN addgroup --gid 2000 mpukgame && \ useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \ mkdir /game && \ chown mpukgame:mpukgame /game && \ apt update && \ apt upgrade && \ apt install -y ca-certificatesUSER mpukgame# ========================================================##========================================================-# Custom game stuff##custom-game-stuff---------------------# ========================================================##========================================================-FROM mpuk AS game# copy game files here##copy-game-files-here# for example:##for-example:WORKDIR /gameCOPY --chown=mpukgame . .# set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./gamebinary" ]

Steam에 업로드된 게임 서버 빌드를 사용하여 컨테이너 빌드 생성

Steam에 업로드된 게임 서버 빌드와 함께 사용할 컨테이너 빌드를 업로드하려면 SteamCMD를 사용하여 컨테이너 이미지를 빌드할 수 있습니다. 다음 코드 블록은 SteamCMD 프로세스를 위한 예제 Dockerfile입니다.
# ========================================================##========================================================-# SteamCMD stuff##steamcmd-stuff-----------------------# ========================================================##========================================================-FROM steamcmd/steamcmd:ubuntu-20 AS steamcmdWORKDIR /gameCOPY update.txt /data/update.txtRUN steamcmd +runscript /data/update.txt# if you want to avoid having the update.txt file, use:##if-you-want-to-avoid-having-the-update.txt-file,-use:# RUN steamcmd +force_install_dir /game/<game_name> \##run-steamcmd-+force_install_dir-/game/game_name-# +login anonymous +app_update <steam_appid> validate +quit##+login-anonymous-+app_update-steam_appid-validate-+quit# ========================================================##========================================================-# Unity base image stuff##unity-base-image-stuff------------------# ========================================================##========================================================-FROM ubuntu:20.04 AS mpukRUN addgroup --gid 2000 mpukgame && \ useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \ mkdir /game && \ chown mpukgame:mpukgame /game && \ apt update && \ apt upgrade && \ apt install -y ca-certificates lib32z1USER mpukgame# ========================================================##========================================================-# Custom game stuff##custom-game-stuff---------------------# ========================================================##========================================================-WORKDIR /gameCOPY --from=steamcmd --chown=mpukgame:mpukgame /game/<game_name> /game/<game_name># set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./game_binary" ]

Server.json 파일

기본 컨테이너 이미지를 사용하는 경우
server.json
파일이 컨테이너에 이미 탑재되어 있습니다. 컨테이너의 홈 환경 변수를 확인하여
server.json
파일 위치를 찾을 수 있습니다.
  • Linux 컨테이너에서는
    $HOME
    환경 변수 안에 있습니다.
  • Windows 컨테이너에서는
    $HOMEPATH
    환경 변수 안에 있습니다.
컨테이너 빌드를 처음부터 만드는 경우, 자체
server.json
파일을 생성하여 컨테이너 이미지에 포함시켜야 합니다. 이 파일의 포맷은 Server.json을 참고하고,
server.json
변수에 대한 설명은 구성 변수를 참고하십시오.