最近 Factorio が流行っていますね。
私の研究室でもインフラエンジニアの募集があったので、ついつい購入してしまいました。
Factorioの研究は進むのに、大学の研究は全く進みません。困りました。
Factorio の headless server はバイナリファイル一枚で動いているので、そこまでインストールに時間はかかりません。
しかし CoreOS の中にバイナリを置きたくないのと、バージョン追従のことを考えて Docker image を作成しました。
Dockerhub: https://hub.docker.com/r/munisystem/factorio/
Github: https://github.com/munisystem/docker-factorio-server
使い方
$ docker run -d \
-v /srv/docker/factorio/save:/factorio/saves \
-p 34197:34197/udp \
munisystem/factorio:stable
このコマンドで
- マップデータの作成
- サーバーの起動
をいっぺんに行うことができます。
また docker-compose がインストールされている場合は、
$ wget https://raw.githubusercontent.com/munisystem/docker-factorio-server/stable/docker-compose.yml
$ docker-compose up -d
で動かすこともできます。
引数が与えられている場合はバイナリを直接叩くようになっています。
すでにサーバーを運用していてマップデータが手元にある場合は、
$ docker run -d \
-v /srv/docker/factorio/save:/factorio/saves \
-p 34197:34197/udp \
munisystem/factorio:stable --start-server <savedata>
のような形で起動してください。
イメージの作成
イメージのサイズを小さくしたかったので、Alpine Linux を使うことにしました。
Alpine Linux については以下の記事が参考になります。
http://qiita.com/asakaguchi/items/484ba262965ef3823f61
Factorio の headless server は glibc があれば動くようなのですが、Alpine Linux には glibc が入っていません。
Dockerhub を覗いていたらglibc インストール済みイメージ を見つけたので、今回はこれをベースイメージにしています。
今回作成した Dockerfile は以下になります。
FROM frolvlad/alpine-glibc:alpine-3.3_glibc-2.23
MAINTAINER munisystem
ENV APP_VER 0.12.30
RUN apk --update add wget && \
wget --no-check-certificate -O /tmp/factorio.tar.gz https://www.factorio.com/get-download/`echo $APP_VER`/headless/linux64 && \
tar zxvf /tmp/factorio.tar.gz && \
apk del wget && \
rm -rf /var/cache/apk/* /tmp/*
WORKDIR factorio
COPY ./start.sh /factorio/start.sh
EXPOSE 34197/udp
ENTRYPOINT ["./start.sh"]
イメージサイズは 24MB(Dockerhub調べ) になります。
とても軽量ですね。
まとめ
docker で簡単にマルチプレイ用の環境を作ることができます。
みなさんも汗水たらして工場運営しましょう。
時間泥棒とか言わない。