DockerDockerデーモンに関するもう少し詳しい説明どのような仮想環境でも、仮想環境全体を制御する管理機能的役割を果たすコンポーネントがあると思います。Dockerの場合は、dockerデーモンがその役割を担ってます。通常は、Dockerデーモンは大々的に前面には登場しませんが、なにか少し複雑なことをしてみたいとか、問題が発生したときなどには、逆にほぼ関わってきます。そんな時に役に立つ情報になればと思い、dockerデーモンの基本的なことから、更にもう少し突っ込んだ内容について書いてみました。実際のDocker環境を利用した例を掲載しておりますが、ホストOSはCentOS7.2を使用しております。本記事の目次Dockerデーモンの詳細説明Dockerデーモンとはdockerdのオプションの設定方法Dockerデーモンとの通信(コミュニケーション)方法Dockerデーモンの詳細説明Dockerデーモンは、Docker環境の中では最も重要なコンポーネントなのですが、縁の下の力持ち的な存在であるため、あまり目立たないと思います。DockerデーモンとはDockerデーモンとは、Dockerの心臓部にあるとても重要なコンポーネントです。Dockerデーモンは、Docker内のコンポーネント(Dockerイメージ、Dockerコンテナ、Dockerネットワーク、DockerボリュームなどDockerの構成要素)の管理者的な位置づけのデーモンです。Docker内のコンポーネントを制御する場合は、Dockerクライアントを使ってDockerデーモンとやり取りを行います。APTを採用しており、自由度の高い構成となってます。Dockerコンテナを1つのOSと見た場合、DockerデーモンはそのOSのカーネル部分に相当すると考えて良いでしょう。Dockerは、コンテナ型仮想環境を提供するために、Linuxカーネルが元々持っている複数の機能を利用してます。言い換えれば、Dockerは、Linuxカーネルが元々持つ便利で複雑な機能を組み合わせて、利用者に解り安く仮想環境を提供してくれている、といって良いと思います。参考までに、Linuxが利用しているLinuxカーネルの機能の主なものを以下に挙げます。複数のマウントポイントを1つに束ねる技術いつかLinuxカーネルの標準機能を使って、自分がDockerになったつもりで、手動でコンテナを作ってみたいと思います。そのときは、このサイトに載せようと思います。実際にDockerデーモンを見てみましょう。ホストOSはCentOS7.2を使用してます。status」にてdockerサービスのステータスを確認します。docker以下のような内容が出力されたと思います。full.CentOS7.2では、Dockerはsystemd配下で動いています。よって、Dockerデーモンはsystemctlコマンドにて操作します。Dockerデーモンのバイナリは、「/usr/bin/dockerd」のようですね。「ps」コマンドで見てみましょう。dockerd以下のような内容が出力されたと思います。/usr/bin/dockerdいました。オプションはついていないようですね。■dockerdのオプションの設定方法では、dockerdのオプションについてみてみましょう。dockerdのオプション一覧は以下のコマンドで確認できます。--help内容はバージョンごとに異なると思いますので、省略します。詳細は、Docker公式サイトでご確認ください。単独のDockerホストで外部から接続可能なDockerコンテナを作ることでしたら、デフォルトの状態で問題ないと思います。単独のDockerホストで外部から接続可能なDockerコンテナを作ることでしたら、デフォルトの状態で問題ないと思います。オプションを指定する場合は、以下のディレクトリに定義ファイルを置くことで、dockerデーモンの起動時に、その内容を自動で反映してくれます。/etc/systemd/system/docker.service.d/例えば、通常はDockerレジストリとの通信はhttpsで行いますが、特定のネットワーク内のDockerレジストリはhttpで行うようにするためには、dockerdに「--insecure-registry」オプションを使用します。「192.168.0.0/24」のネットワーク内のDockerレジストリとの通信はhttpで大丈夫なように設定する場合は、以下の内容の定義ファイル「docker.conf」(ファイル名は任意)を上のディレクトリに作成します。--insecure-registry=192.168.0.0/24この内容のファイル「docker.conf」を「/etc/systemd/system/docker.service.d/」に保存したら、dockerdの再起動を行います。systemd関連のファイルを更新したので、以下のコマンドを実行します。daemon-reloadその後、以下のコマンドでdockerdの再起動を行います。docker再起動後、定義が反映されていることを確認します。docker以下のような内容が出力されたと思います。(以下省略)「/usr/bin/dockerd」が以下のように、指定したオプション付きで起動されていることが確認できました。--insecure-registry=192.168.0.0/24あと、出力内容の3~4行目に、先ほど作成したファイルが読み込まれていることも解ります。|-docker.conf今後、Dockerに色々なカスタマイズを行うことになると思いますが、その際はこの方法でオプションの追加を行う必要が出てくるかもしれませんので、覚えておいた方が良いかもしれません。■Dockerデーモンとの通信(コミュニケーション)方法Dockerデーモンとの通信は、Dockerクライアントである「docker」コマンドを使用して行いますが、その通信には、デフォルトでは「unixドメインソケット」という技術を使用して行います。unixドメインソケットは、ファイルシステムを介して行う通信方式で、Dockerは「/var/run/docker.sock」というファイルを使用してます。「ls」コマンドで確認してみてください。/var/run/docker.sockこのファイルを使用して、プロセス間通信を行っています。ファイルの所有権は、ユーザはroot、グループはdockerになっています。以前の記事で、Docker管理者を追加する方法について書かせていただきましたが、その際に行ったdockerグループへの追加作業は、ここと関連しているのです。このファイルへの読み書きができませんと、dockerデーモンと通信が出来ないことになります。ps」を行っても、Dockerデーモンと通信が出来なくなり、以下の内容が出力されるようになってしまいました。host?所有権を元に戻したら、当然元に戻りました。危険なので、あえてコマンドは書きませんが、お試しになる場合は自己責任でお願いします。Dockerデーモンとの通信方法は、unixドメインソケット以外に、TCPソケットもあります。この方法を安易に行ってしまいますと、Dockerホストのroot権限を晒すこととイコールになってしまいますので、十分ご注意ください。これに関しましては、そのうち書きたいと思います。最後までお読みいただきありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。テニス、作品鑑賞(映画、アニメ、ドラマ、絵画など)、讃岐うどん食べ歩き。コンピュータ業界に身を置く中年おやじです。世の中にはまだ自分が知らない情報があふれていて、知っているつもりでも全体の半分も知らないことがいっぱいあります。見つけた情報はGoogleKeepにメモる毎日です。ある日、自分が良いと思うことは、同じように感じる方も、数は少ないかもしれないけどいるはず、と思いまして、そのことが本サイト「めもたんす」を作るきっかけとなりました。自分がいいなと思ったことを記事にまとめたサイトです。technology.。