本日得た知識の1つを記していきます。
ソケット通信とは
プロセス間通信の方法の一つ。ネットワークを経由することで、データのやりとりなどを行う。その際に通信先を特定する際には、通信先のドメイン名・IPアドレス・ポート番号を基に、通信先のソケットという部分に接続します。ソケットとは、通信におけるインターフェースの名前です。
UNIXドメインソケットとは
プロセス間通信の際に、ネットワークを経由する事なく、通信先と繋げる方法のこと、またはそのインターフェースのことをUNIXドメインソケットと言います。同一のホスト間で行われ、IPアドレスなどを用いて名前解決する必要がない為、高速なプロセス間通信を可能にします。UNIXドメインソケットを用いて接続された機器(webサーバーなど)は、同一のプロセスとして扱う事ができる。
参考
認識違い等ございましたら、ご指摘頂けると幸いです。
例:NginxとUnicorn
Dockerの同一コンテナ内で、NginxとUnicornをUNIXドメインソケット接続する。
:app/nginx/ドメイン名.conf
user root;
events {
:
}
http {
upstream app {
server unix:/root/tmp/unicorn.sock;
}
server {
:
}
}
:app/confing/dev_unicorn.rb
:
listen File.expand_path('/root/tmp/unicorn.sock', app_path)
:
IPアドレスとポート番号を指定する代わりに、socketファイルの位置を指定する事で、UNIXドメインソケット通信を実現させています。
ちなみに、こちらの設定ではソケットファイルをroot/
配下の/tmp
ファイルに設置する事で、コンテナの停止・起動とを同一のタイミングでプロセス同士の接続を行うよう設定している。