[Из песочницы] Запускаем i2pd в контейнере Docker на CentOS 7
На Хабрахабре есть отличная статья по i2pd. Единственный недостаток проекта в том, что его авторы предоставляют пакеты только для Ubuntu и Debian, что составляет определённое неудобство для пользователей CentOS.
Владельцу домашнего NAS на CentOS 7 вроде меня остаётся либо собирать i2pd из исходников, либо воспользоваться Docker, чтобы установить его поверх образа Debian Jessie.
Итак, статья посвящена созданию контейнера с i2pd в Docker под CentOS 7.
Установка Docker
Docker имеет свой репозиторий с актуальными версиями. Чтобы его подключить, создадим в каталоге /etc/yum.repos.d
файл docker.repo
со следующим содержимым:
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
После чего установим нужный нам пакет:
$ sudo yum install docker
$ sudo yum install docker-engine
$ sudo systemctl enable docker.service
$ sudo systemctl start docker
Теперь можно проверить корректность установки:
$ sudo docker run --rm hello-world
И если всё ок, то нам осталось добавить пользователя, который будет баловаться контейнерами, в группу docker:
$ sudo usermod -aG docker cube
Создаём образ
Для этого нам потребуется создать файл Dockerfile
со следующим содержимым:
FROM debian:jessie
MAINTAINER Cube
# Эти порты нужны для того, чтобы наш контейнер был доступен
# как прокси и у нас был бы доступ на его консоль
EXPOSE 4444 4447 7070 9439
# Обновим образ
RUN apt-get update && apt-get upgrade
# Установим зависимости i2pd
RUN apt-get install -y wget \
libboost-date-time1.55.0 \
libboost-filesystem1.55.0 \
libboost-program-options1.55.0 \
libboost-system1.55.0 \
libminiupnpc10
# Скачаем последнюю версию i2pd и установим пакет
RUN cd /tmp && wget https://github.com/PurpleI2P/i2pd/releases/download/2.9.0/i2pd_2.9.0-1jessie1_amd64.deb
RUN dpkg -i /tmp/i2pd_2.9.0-1jessie1_amd64.deb
RUN rm /tmp/i2pd_2.9.0-1jessie1_amd64.deb
# Делаем пользователя i2pd доступным - назначаем
# ему рабочий shell
RUN usermod -s /bin/bash i2pd
# Копируем конфиг i2pd и файл с подписками
# внутрь контейнера
COPY i2pd.conf /etc/i2pd/i2pd.conf
COPY subscriptions.txt /etc/i2pd/subscriptions.txt
# Определяем точку входа нашего контейнера.
# Эта команда запустится при его запуске
ENTRYPOINT exec su - i2pd -c "/usr/sbin/i2pd --conf ~/i2pd.conf"
Рядом с Dockerfile должны лежать два файла.
- i2pd.conf (конфиг рабочий, но если есть желание, можно исправить его по своему вкусу):
log = stdout
daemon = false
service = false
## Port to listen for connections
## By default i2pd picks random port. You MUST pick a random number too,
## don't just uncomment this
port = 9439
## Enable communication through ipv4
ipv4 = true
## Enable communication through ipv6
ipv6 = true
## Bandwidth configuration
## L limit bandwidth to 32Kbs/sec, O - to 256Kbs/sec, P - to 2048Kbs/sec,
## X - unlimited
## Default is X for floodfill, L for regular node
bandwidth = O
## Router will be floodfill
# floodfill = true
[http]
## Uncomment and set to 'false' to disable Web Console
enabled = true
## Address and port service will listen on
address = 0.0.0.0
port = 7070
[httpproxy]
## Uncomment and set to 'false' to disable HTTP Proxy
enabled = true
## Address and port service will listen on
address = 0.0.0.0
port = 4444
## Optional keys file for proxy local destination
# keys = http-proxy-keys.dat
[socksproxy]
## Uncomment and set to 'false' to disable SOCKS Proxy
enabled = true
## Address and port service will listen on
address = 0.0.0.0
port = 4447
- subscriptions.txt — это файл с подписками
http://inr.i2p/export/alive-hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt
http://i2host.i2p/cgi-bin/i2hostetag
http://no.i2p/export/alive-hosts.txt
http://rus.i2p/hosts.txt
http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt
Теперь запустим команду создания нашего образа. Docker автоматически загрузит и установит нужные слои:
$ docker build -t i2pd .
Запускаем контейнер
$ docker run --name=i2pd -td -p 7070:7070 -p 4444:4444 -p 4447:4447 -p 9439:9439 i2pd
Ключ -p
указывает, какие порты открывать наружу, а -td
запускает процесс в фоне, при этом он продолжает писать лог в stdout, что является стандарной практикой при использовании контейнеров и позволяет удобно просматривать его вывод командой:
$ docker logs -t i2pd
После запуска консоль нашего i2pd доступна по порту 7070
, а http- и socks-proxy по портам 4444
и 4447
соответственно.
Для ленивых
Для тех, кто не хочет создавать контейнер самостоятельно, я сделал готовый на Docker hub. Устанавливается он одной командой:
$ docker pull hexaedron/i2pd
Запускается он точно так же, как описано выше.
Заключение
Закончу статью сcылкой на github — там лежит сам Dockefile, парочка скриптов для запуска-остановки и конфиги. Надеюсь, кому-нибудь информация пригодится. Буду рад конструктивной критике.