컨테이너 빌드
컨테이너는 소프트웨어와 모든 종속 관계를 하나의 단위로 패킹하는 방법입니다. Multiplay Hosting 컨테이너 빌드를 사용하면 게임 서버와 그 종속 관계를 패키징하고 컨테이너를 빌드한 다음 Multiplay Hosting 컨테이너 레지스트리에 푸시할 수 있습니다.
빌드를 생성할 때 컨테이너 이미지를 선택하면 Unity Cloud Dashboard에서 컨테이너 빌드를 생성할 수 있습니다. 빌드 생성 마법사를 따라 서비스 계정을 추가하고, 레지스트리를 추가하고, 이미지를 선택하면 됩니다. 컨테이너 이미지로 빌드 만들기를 참조하십시오.
Multiplay Hosting은 <ImageName>:<ImageTag>
포맷의 Docker 컨테이너 태그를 사용합니다. Multiplay Hosting은 빌드에 적절한 이름과 태그를 생성하여 컨테이너 빌드를 생성하거나 업데이트할 때 이를 Unity Cloud Dashboard에 표시합니다.
docker tag <ImageName>:<ImageTag> registry.multiplay.com/4818982f-bb28-4c39-9d44-628204b6780e/1ae4de65-849d-4ff1-86fc-1de3bdfbd891/12788:v1
참고: Multiplay Hosting은 Unity Cloud Dashboard를 통해 빌드를 만들 때만 ImageName
과 ImageTag
를 생성합니다. CLI 툴을 사용하는 경우, ImageName
과 ImageTag
를 직접 생성해야 합니다.
컨테이너 빌드 요구 사항
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
# for example:
WORKDIR /game
COPY --chown=mpukgame . .
# set your game binary as the entrypoint
ENTRYPOINT [ "./gamebinary" ]
위 예제에서 다음을 수행할 수 있습니다.
<tag>
를 사용할 기본 이미지 버전으로 변경하면 됩니다. 사용할 수 있는 태그 목록은 linux-base-image 태그에서 확인할 수 있습니다.WORKDIR
을 컨테이너 프로세스의 현재 작업 디렉토리로 설정합니다. 프로세스를 실행하거나 파일을 복사하는 모든 작업은 작업 디렉토리와 관련이 있습니다.ENTRYPOINT
를 컨테이너가 시작될 때 실행되는 실행 파일로 설정합니다. 이 엔트리포인트는 게임 서버 바이너리여야 합니다.
경고: 빌드 구성에서 지정한 실행 파라미터는 Dockerfile에서 정의한 CMD
를 덮어쓸 수 있습니다.
간단한 예제는 Simple Game Server Dockerfile을 참고하십시오(GitHub의 Unity Multiplay 예제).
컨테이너 빌드 직접 생성
Dockerfile 파일을 직접 생성하려는 경우, 사용자가 직접 컨테이너가 다음 요구 사항을 충족하는지 확인해야 합니다.
경고: 컨테이너를 직접 생성해야 하는 특정 사용 사례나 고급 사용 사례가 아니라면 기본 이미지를 사용하십시오.
요구 사항 | 설명 |
USER mpukgame | 컨테이너가 mpukgame 을 USER 로 사용해야 합니다. 이 사용자는 GID(그룹 식별자)와 UID(사용자 식별자)가 모두 2000이어야 합니다. |
ENTRYPOINT | 컨테이너에 ENTRYPOINT 가 있어야 합니다. |
다음 코드 블록은 이러한 요구 사항을 충족하는 간단한 Dockerfile입니다.
# ======================================================== #
# Unity base image stuff #
# ======================================================== #
FROM ubuntu:20.04 AS mpuk
RUN 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
USER mpukgame
# ======================================================== #
# Custom game stuff #
# ======================================================== #
FROM mpuk AS game
# copy game files here
# for example:
WORKDIR /game
COPY --chown=mpukgame . .
# set your game binary as the entrypoint
ENTRYPOINT [ "./gamebinary" ]
Steam에 업로드된 게임 서버 빌드를 사용하여 컨테이너 빌드 생성
Steam에 업로드된 게임 서버 빌드와 함께 사용할 컨테이너 빌드를 업로드하려면 SteamCMD를 사용하여 컨테이너 이미지를 빌드할 수 있습니다.
다음 코드 블록은 SteamCMD 프로세스를 위한 예제 Dockerfile입니다.
# ======================================================== #
# SteamCMD stuff #
# ======================================================== #
FROM steamcmd/steamcmd:ubuntu-20 AS steamcmd
WORKDIR /game
COPY update.txt /data/update.txt
RUN steamcmd +runscript /data/update.txt
# if you want to avoid having the update.txt file, use:
# RUN steamcmd +force_install_dir /game/<game_name> \
# +login anonymous +app_update <steam_appid> validate +quit
# ======================================================== #
# Unity base image stuff #
# ======================================================== #
FROM ubuntu:20.04 AS mpuk
RUN 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 lib32z1
USER mpukgame
# ======================================================== #
# Custom game stuff #
# ======================================================== #
WORKDIR /game
COPY --from=steamcmd --chown=mpukgame:mpukgame /game/<game_name> /game/<game_name>
# set your game binary as the entrypoint
ENTRYPOINT [ "./game_binary" ]
Server.json 파일
기본 컨테이너 이미지를 사용하는 경우 server.json
파일이 컨테이너에 이미 탑재되어 있습니다. 컨테이너의 홈 환경 변수를 확인하여 server.json
파일 위치를 찾을 수 있습니다.
- Linux 컨테이너에서는
$HOME
환경 변수 안에 있습니다. - Windows 컨테이너에서는
$HOMEPATH
환경 변수 안에 있습니다.
컨테이너 빌드를 처음부터 만드는 경우, 자체 server.json
파일을 생성하여 컨테이너 이미지에 포함시켜야 합니다. 이 파일의 포맷은 Server.json을 참고하고, server.json
변수에 대한 설명은 구성 변수를 참고하십시오.