Docker で ARK Survival Evolved サーバを構築する

に公開

概要

友人のいらなくなったデスクトップパソコンを借りてきたので、ここに ARK Survival Evolved のサーバをホストすることになった。サーバには Ubuntu Server 24.04 をインストール。OS および Docker がインストールされていることが前提。

Gemini Pro プロンプト

Docker で ARK Survival Evolved のゲームサーバをホストしたいです。Docker イメージは ubuntu:24.04 を使用します。Docker Compose ファイルおよび Dockerfile を作成してください。これらは、ホストマシンの /home/me/server-ark ディレクトリの配下に置かれます。server-ark ディレクトリは、コンテナの /home/ubuntu にボリュームマウントします。つまり、volumes: - .:/home/ubuntu ということです。基本的には /home/me/server-ark:/home/ubuntu ディレクトリを使用します。ただし、ゲームリソース(SteamCMD でダウンロードしたデータ)は /home/me/server-ark/resource:/home/ubuntu/resource に置きます。また、シェルスクリプトを 1 つ作ります。ひとつめは launch.sh です。ここでは、ゲームリソースのダウンロードおよび更新およびゲームサーバの起動を行います。steamcmd ディレクトリは、コンテナの /steamcmd にインストールしてください。なお、セキュリティ対策を実施してください。ただし、ユーザの追加は行わず、ubuntu ユーザを使用してください。UID=1000、GID=1000 を使用します。ゲームの実行は一般ユーザで行い、Root 権限を使用してはいけません。コンテナのビルド時にゲームリソースをダウンロードして、ゲームサーバを自動起動します。次回からは、アップデートのチェックのみ行われます。コンテナを起動すると同時に、ゲームサーバが起動するようにします。

環境

  • OS: Ubuntu 24.04.4 LTS
  • Docker: v29.2.1

最終構成

server-ark/
    ├ Steam/
        ├ ...
        └ steamapps/(Steam 関連のファイル)
    ├ resource/
        ├ ...
        └ ShooterGame/(ARK ゲームデータ)
    ├ launch.sh
    ├ Dockerfile
    └ docker-compose.yml

構築手順

1. Dockerfile を作成

Dockerfile
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    lib32gcc-s1 \
    lib32stdc++6 \
    libstdc++6 \
    curl \
    ca-certificates \
    libsdl2-2.0-0 \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /steamcmd && chown ubuntu:ubuntu /steamcmd

USER ubuntu
WORKDIR /home/ubuntu

RUN cd /steamcmd && \
    curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

ENTRYPOINT ["/bin/bash", "/home/ubuntu/launch.sh"]

2. Docker Compose を作成

docker-compose.yml
services:
  server-ark:
    build: .
    image: ark-server-on-ubuntu-2404:1.0
    container_name: server-ark
    user: "1000:1000"
    volumes:
      - .:/home/ubuntu
      - ./resource:/home/ubuntu/resource
    ports:
      - "7777:7777/udp"
      - "7778:7778/udp"
      - "27015:27015/udp"
    ulimits:
      nofile:
        soft: 1000000
        hard: 1000000
    restart: unless-stopped
    tty: true
    stdin_open: true

3. ゲームサーバ起動スクリプトを作成

launch.sh
#!/bin/bash

STEAMCMD="/steamcmd/steamcmd.sh"
INSTALL_DIR="/home/ubuntu/resource"
ARK_BIN="$INSTALL_DIR/ShooterGame/Binaries/Linux/ShooterGameServer"

echo "--- Checking for updates ---"
$STEAMCMD +force_install_dir "$INSTALL_DIR" +login anonymous +app_update 376030 validate +quit

echo "--- Starting ARK Server ---"
exec "$ARK_BIN" "TheIsland?listen?SessionName=ServerXYZ" -server -log

4. ディレクトリを作成して起動

cd /home/me/server-ark
mkdir -p resource
chmod +x launch.sh
sudo chown -R 1000:1000 /home/me/server-ark
docker compose up -d --build

Discussion