ラベル systemd の投稿を表示しています。 すべての投稿を表示
ラベル systemd の投稿を表示しています。 すべての投稿を表示

2018/07/08

自前の Docker Registry を Systemd で管理する

前回の記事では自前で Docker Registry を立ててみました。
ですが、これだと docker run しただけなので、マシンを再起動すると上がってこない。
ということで systemd の unit にしてしまって自動起動させるようにしました。


環境

  • OS: CentOS Linux release 7.4.1708 (Core)
  • Docker: version 1.13.1, build 774336d/1.13.1
  • Kernel: 3.10.0-693.5.2.el7.x86_64


systemd の unit を書く

ググると誰かが書いた unit がいくつかヒットしました。これとかこれとか。
これらを参考に unit を書きます。とはいっても、考慮する具体的な内容は
  • registry の container の name は決めうち
    • unit を書くのを楽にするため
    • volume は面倒なので mount しない
  • registry の dependency には docker がある
    • サービスの起動順番の指定
くらいのものです。

ということで、できたのが
です。こいつを
  • /usr/lib/systemd/system/docker-registry.service
に配置。それから怒涛の systemctl 。
  • $ sudo systemctl daemon-reload
    • unit の reload で認識させる
  • $ sudo systemctl start docker-registry
    • systemd 経由で docker-registry を起動してみる。
    • docker ps するときちんと生きてます。
  • $ sudo systemctl restart docker
    • docker を再起動してもちゃんと生きてる。
    • dependency の設定も上手くいってそうです。
  • $ sudo systemctl enable docker-registry
    • んで、マシン起動時に起動するように
  • $ sudo reboot
    • そして再起動。
    • 再起動後にもきちんと registry が上がってました。良し良し。

ってな感じで再起動しても docker-registry が上がるようになりました。
めでたしめでたし。


参考

2018/04/22

https proxy があるネットワークで Docker を動かす

時にプロキシを介さないと外に出られないネットワークがあります。
curl とかは http_proxy や https_proxy の環境変数を設定するだけで外に出られるので楽。
具体的にはこんな感じ。

  • $ export http_proxy=http://192.168.100.200:12345
  • $ export https_proxy=https://192.168.100.200:54321

しかし docker は環境変数の設定だけでは外に出られない。
具体的には docker pull ができなかった。
docker pull はデフォルトだと https で docker.io に image を取るので引っかかる。


環境

  • Ubuntu 16.04 LTS
  • Docker: 1.5-1

proxy 設定

素直に公式のドキュメントを見る。
具体的には
  • $ mkdir -p /etc/systemd/system/docker.service.d
  • $ vi /etc/systemd/system/docker.service.d/http-proxy.conf
    • [Service]
    • Environment="HTTP_PROXY=http://192.168.100.200:12345"
    • [Service]
    • Environment="HTTPS_PROXY=https://192.168.100.200:54321"
でOK。
systemctl restart docker をすると proxy 経由で pull ができるようになります。


参考

2017/10/12

systemd 制御下のプロセスの SEGV を追う

systemd で起動したプロセスがいつの間にか死んでる。
systemctl status を確認すると SEGV している。SEGV ......
SEGV の原因を追うために systemd 管理下のプロセスで core を取る方法とかのログ。
ちなみにそのプロセスは FreeRADIUS ですね。


コアを dump するように

  • $ vim /etc/security/limits.d/core.conf
  • $ vim /etc/sysctl.d/core.conf

コアを取るように設定。
  • $ reboot
したら設定の適用完了。


動作確認

きちんと取れるか、死んでたプロセスに

    • $ kill -11 <pid>
    とかしたら core が取れるか確認できます。


    その後

    取れたコアを使って gdb で原因を追っていく。
    その際に bt などが使えないのがつらいので
    • $ yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/9c/hogehogefugafuga

    とかしておく。
    こうすると freeradius-debuginfo が入って bt とかを見られるようになる。
    とかとかしながらデバッグして原因を突き止めたのがこの記事です。


    環境

    • OS: CentOS Linux release 7.4.1708 (Core) 
    • kernel: 3.10.0-693.2.2.el7.x86_64
    • systemd: 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
    • FreeRADIUS: 3.0.4