И снова добрый день/вечер/ночь и тд. всем кто читает данный блог.
Потихоньку я осваиваю основы Docker и вникаю в его возможности и функционал. Тяжелый это труд все это описывать, проще все сделать быстренько за какой то часик, а потом тратишь несколько дней на оформление этого все в читабельный вид, что бы можно это все опубликовать. Ну что же продолжим... это было небольшое лирическое отступление :) что бы выровнять первый абзац с картинкой :)
Продолжаем наши эксперименты с Docker. Сегодня поупражняемся с созданием Dockerfile. Подопытным "кроликом" будет у нас все тот же 7 Days to Die.
Несколько слов о новых образах, которые теперь доступны через на официальном "Hub Docker".
~> docker search sovicua NAME DESCRIPTION STARS OFFICIAL AUTOMATED sovicua/debian Debian Jessie (8.0) 0Все они построены на базе Debian Jessie. На текущий момент есть два образа с тегами "jessie" и "steamcmd". Собственно первый это чистый Debian с установленными дополнительными пакетами и настроенной временной зоной. Данные настройки были описаны в Установка timezone в базовом образе Docker. Второй собран на базе первого с установленными библиотеками и steamcmd.
Итак, создаем файл конфигурации для создания образа контейнера.
~> mkdir docker/steamcmd/ ~> cd docker/steamcmd/ ~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:jessie
MAINTAINER Viktor M. Sytnyk <sovicua sovic.org.ua>
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y wget \
&& echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/2/Debian_8.0/ /' >> /etc/apt/sources.list.d/fish.list \
&& wget http://download.opensuse.org/repositories/shells:fish:release:2/Debian_8.0/Release.key \
&& apt-key add - < Release.key \
&& apt-get update && apt-get upgrade -y \
&& apt-get install -y lib32gcc1 lib32stdc++6 fish && apt-get clean \
&& useradd -m -c "SteamCMD User" -s /usr/bin/fish steam
WORKDIR /home/steam/steamcmd
RUN wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz \
&& tar -xvzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz \
&& chown -R steam:steam /home/steam
CMD /usr/bin/fish
Как вы можете видеть, shell по умолчанию я использую Fish Shell, хотя это не существенно, но понравился он мне :)Создаем образ:
~/d/steamcmd> docker build -t sovicua/debian:steamcmd .После этого можно выгрузить образ на Docker Hub:
~/d/steamcmd> docker push sovicua/debian:steamcmdТеперь у нас есть готовый образ с установленным steamcmd, что позволит нам в дальнейшем быстро развернуть любую игру которая поддерживает установку с использованием данной утилиты. Теперь переходим к созданию образа с установленным сервером 7 Days to Die.
Для начала создадим файл скрипта с помощью которого будем устанавливать, а также обновлять саму игру.
~> mkdir docker/games/7dtd ~> cd docker/games/7dtd ~/d/steamcmd> vim 7dtd.steamcmd
login steam_user steam_password
force_install_dir /home/steam/games/7dtd
app_update 294420 validate
quit
Где, steam_user и steam_password это имя пользователя и пароль на учетной записи которого куплена эта игра.Теперь создадим собственно сам файл конфигурации создания образа.
~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:steamcmd MAINTAINER Viktor M. Sytnyk <sovicua@sovic.org.ua> WORKDIR /home/steam/steamcmd COPY 7dtd.steamcmd /home/steam/steamcmd/ CMD /usr/bin/fishЧестно говоря, можно было бы и не делать данный образ, для этих целей можно бы использовать предыдущий образ, создав в нем скрипт установки и обновления игры, но раз уж автоматизируем то делаем все типа ка надо :) Изначально я планировал что бы при создании образа, сразу инсталлирована игра, но так как у меня настроен Steam Guard, то он запрашивал у меня код, так как это типа новая машина которая хочет получить доступ к моей учетной записи.
В Dockerfile была команда на запуск скрипта:
RUN ./steamcmd.sh +runscript 7dtd.steamcmd
Победить это, что бы инсталляция останавливалась при запросе кода, у меня так и не получилось. :( По этому инсталляцию придется выполнять руками уже в контейнере.После этого создаем сам образ как обычно.
~/d/g/7dtd> docker build -t sovicua/games:7dtdВот что у нас получилось после всех этих процедур:
~/d/7dtd> docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE sovicua/games 7dtd c1c3539bbe2b 4 hours ago 594 MB sovicua/debian steamcmd 72ebdb1d894c 4 hours ago 594 MB sovicua/debian jessie 8ca03adc0398 27 hours ago 478.9 MBТеперь мы можем быстренько создать контейнер:
~/d/7dtd> docker run --name="7dtd" --net="host" --user="steam" -i -t sovicua/games:7dtdВыполняем инсталляцию игры, не забываем указать имя пользователя и пароль, если это не сделали раньше.
~/steamcmd> ./steamcmd.sh +runscript 7dtd.steamcmdПосле инсталляции правим файл конфигурации сервера serverconfig.xml как вам удобно, и можно запускать сервер.
~/steamcmd> cd ../games/7dtd ~/g/7dtd> vim serverconfig.xmlИз параметров которые я у себя изменил, это установил пароль на доступ по telnet, и небольшие настройки самого сервера, такие как тройной лут и длина суток 2 часа реального времени. И еще пару параметров.
<property name="ServerName" value="iHome Games Server" /> <property name="ServerPassword" value="" /> <property name="ServerMaxPlayerCount" value="4" /> <property name="ServerDescription" value="iHome 7 Days to Die server" /> <property name="ServerWebsiteURL" value="home.sovic.org.ua" /> ... <property name="DayNightLength" value="120" /> <property name="DayLightLength" value="18" /> ... <property name="DropOnDeath" value="2" /> <property name="DropOnQuit" value="0" /> ... <property name="CraftTimer" value="0" /> <property name="LootTimer" value="0" /> ... <property name="EnemySpawnMode" value="4" /> ... <property name="LootAbundance" value="300" /> <property name="LootRespawnDays" value="30" />Дополнительно, можно установить мод на сервер, который добавит пару дополнительных команд и самое вкусное что мне нравиться это возможность просмотра карты через веб. Очень помогает в поиске пещерок :) так как они редко сейчас встречаются, а на игровой карте искать не удобно, пока ищешь могут и "ушатать" :)
~/g/7dtd> wget http://illy.bz/fi/7dtd/server_fixes.tar.gz ~/g/7dtd> tar -xzvf server_fixes.tar.gzПример работы данного мода можно посмотреть у меня на сервере iHome 7 Days to Die server.
Ну вот и все, запускаем сервер:
~/g/7dtd> ./startserver.sh -configfile=serverconfig.xmlЕсли кто забыл, то напоминаю, что бы выйти с контейнера без его остановки, используем комбинацию клавиш Ctrl+p Ctrl+q.
На этом все, приятной игры. Если кто захочет поиграть вместе у меня на сервера, пишите.
Заходите на мой блог - UNIX и не только...