MACos 환경에서 구현
Docker Download
docker --version
docker-compose --version
python3 --version
pip3 --version

curl --version

Git Download
여기서는 GitHub 정보들 활용 예정
git --version

Node.js Download
node --version

PlayFab → 'Sign Up Free' 로 진행



→ Title ID : 1B9990
→ 메모장에 복사해두기
mkdir ~/PlayFab
cd ~/PlayFab

git clone https://github.com/PlayFab/MpsSamples.git
cd MpsSamples/wrappingGsdk

PlayFab/
└── MpsSamples/
└── wrappingGsdk/
├── wrapper/ (PlayFab GSDK 통합 코드)
├── fakegame/ (간단한 테스트 서버)
└── Dockerfile (Docker 설정 파일)

fakegame/Program.cs - 간단한 웹 서버// 포트 80에서 웹 서버 시작
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://*:80");
var app = builder.Build();
// /hello 경로
app.MapGet("/hello", () => "Hello from fake game!");
// 서버 실행
app.Run();
wrapper/Program.cs - PlayFab GSDK 통합// PlayFab SDK 시작
GameserverSDK.Start(true);
// 서버 준비 완료 알림
GameserverSDK.ReadyForPlayers();
// 게임 서버 프로세스 시작 및 대기
var process = new Process();
process.StartInfo.FileName = "./fakegame/fakegame";
process.Start();
process.WaitForExit();
Dockerfile의 내용# .NET 8.0 SDK 사용 (중요: 3.1이 아님!)
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
# 프로젝트 파일 복사 및 복원
COPY fakegame/*.csproj ./fakegame/
COPY wrapper/*.csproj ./wrapper/
RUN dotnet restore ./fakegame && dotnet restore ./wrapper
# 전체 코드 복사 및 빌드
COPY fakegame/ ./fakegame/
COPY wrapper/ ./wrapper/
RUN dotnet publish ./fakegame -c release -o /fakegamepublish --self-contained -r linux-x64
RUN dotnet publish ./wrapper -c release -o /wrapperpublish --self-contained -r linux-x64
# 최종 이미지
FROM ubuntu:18.04
# 사용자 생성
RUN useradd --system ue
USER ue
EXPOSE 80/tcp
WORKDIR /app
# 빌드된 파일 복사
COPY --from=build --chown=ue:ue /fakegamepublish ./fakegame
COPY --from=build --chown=ue:ue /wrapperpublish .
# 서버 실행
USER root
CMD chown -R ue.ue $PF_SERVER_LOG_DIRECTORY && su ue -c ./wrapper
FROM mcr.microsoft.com/dotnet/core/sdk:3.1로 되어 있다면,
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build 로 반드시 변경!
FROM : 기본 운영체제 선택 (Ubuntu 18.04)RUN useradd : 보안을 위해 일반 사용자 생성EXPOSE : 외부에서 접속할 포트 번호WORKDIR : 컨테이너 안에서 파일이 저장될 위치COPY : 여러분의 파일을 컨테이너 안으로 복사CMD : 컨테이너 시작 시 실행할 명령어cd ~/PlayFab/MpsSamples/wrappingGsdk
# Docker 이미지 빌드 (첫 실행 시 5-10분 소요)
docker build -t myfirstgame:v1 .

Successfully tagged myfirstgame:v1
docker images

docker network create playfab

docker run -it --rm \
--network playfab \
-p 56100:80 \
myfirstgame:v1 \
/app/fakegame
-it: 인터랙티브 모드 (로그를 바로 볼 수 있음)--rm: 종료 시 컨테이너 자동 삭제--network playfab: PlayFab 네트워크에 연결-p 56100:80: 로컬 56100 포트를 컨테이너 80 포트로 연결



docker ps
Ctrl + C 누르기bashdocker stop playfab-testdocker rm playfab-testdocker restart playfab-testError: port 56100 already in use# 포트 사용 중인 프로세스 확인
lsof -i :56100
# 프로세스 종료
kill -9 [PID]
# 또는 다른 포트 사용
docker run -p 56101:80 myfirstgame:v1
# 종료된 컨테이너 확인
docker ps -a
# 로그 확인하여 오류 파악
docker logs playfab-test
Error: network playfab not founddocker network create playfab
→ MyFisrtGame 들어가기docker login customer12345.azurecr.io -u customer12345 -p <password>
docker tag myfirstgame:v1 customer12345.azurecr.io/myfirstgame:v1
⚠️ 주의 : customer12345를 실제 Azure Username으로 변경
docker push customer12345.azurecr.io/myfirstgame:v1
v1: digest: sha256:abc123... size: 1234
curl http://20.194.123.45:30001/hello