2019年10月14日月曜日

DDNSクライアントのinadynをalpineのdockerイメージで実行

ルータのDDNSが1サイトしか対応していないのと、勉強としてDockerfileを作成してみる。

とりあえず

・「apk add inadyn」がない
https://help.dyn.com/inadyn/ から http://cdn.dyndns.com/inadyn.zipを取得
 実行するが「permission denied」で動かない
・ソースからビルドすると出来上がるイメージが105MBくらいになる。
 ※gccやmakeなどをきれいに消せばいいかも知れないがわからない。



なので

マルチステージビルドで構築
構成
ddns
├Dockerfile
└inadyn.conf

Dockerfile
# inadynをビルド
FROM alpine:latest as alpine_ddns
# ビルドのツール
RUN apk add --no-cache gcc libc-dev make
# ビルド対象:inadyn
WORKDIR /tmp
ADD http://cdn.dyndns.com/inadyn.zip .
RUN unzip inadyn && \
  cd inadyn/ && \
  make && \
  cp ./bin/linux/inadyn /usr/sbin/ && \
  chmod +r /usr/sbin/inadyn && \
  rm -fR /tmp/* && \
  apk del gcc libc-dev make && \
  rm -fR /var/cache/apk/*

# 実行ファイルのみ取得
FROM alpine:latest
COPY --from=alpine_ddns /usr/sbin/inadyn /usr/sbin/inadyn
CMD ["/usr/sbin/inadyn"]
# /etc/inadyn.conf 以外に作成する場合
# CMD ["/usr/sbin/inadyn", "--input_file", "/etc/inadyn.conf"]

inadyn.confを用意
## inadyn configuration file
#update_period_sec 600 # Check for a new IP every 600 seconds
# DynDNS username and password here
username ***
password ***
dyndns_system dyndns@dyndns.org
## Dynamic DNS hosts
alias ***
iterations 1
DynDNSのサイトでテンプレートを作成したものを、systemdでスケジュールする予定なので1回起動して終了するように変更
#↓コメント
#update_period_sec 600 
#↓追加 繰り返し1回
iterations 1
ビルド&実行
docker build . -t ddns_alpine
docker run -v ${PWD}/inadyn.conf:/etc/inadyn.conf --rm ddns_alpine
実行ログ
INADYN: Started 'INADYN version 1.96.2' - dynamic DNS updater.
I:INADYN: IP address for alias '***.dyndns.***' needs update to '***.1.184.***'
I:INADYN: Alias '***.dyndns.***' to IP '***.1.184.***' updated successful.
イメージのサイズ
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
ddns_alpine               latest              81cdd3c60668        4 seconds ago       5.65MB
マルチステージを使わなかった時
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
ddns_alpine               latest              c52ecb23f6e2        11 seconds ago      105MB
docker-compose.yml
version: '3'
services:
  inadyn:
    build: .
    volumes:
      - ./inadyn.conf:/etc/inadyn.conf
docker-compose up
※-dは付けない
今後の予定
systemdでスケジュール化?cron?

0 件のコメント:

コメントを投稿