5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerについてのメモ

Last updated at Posted at 2018-07-25

Dockerについて

この記事は

Dockerについて、読んだことをまとめた個人的なメモです。
以下の書籍を参考にしてます。

また、次のような知識をまとめてます。

  • コンテナとは
  • Dockerとは
    • Dockerの概要
    • Dockerを支える仕組み
    • Dockerのメリット
    • docker-compese

コンテナとは

仮想化技術の一つです。ホストOSに論理的な区画を作って、アプリケーションやライブラリーの実行環境を閉じ込め、あたかも個別のサーバーのように使います。ホストOSのリソースを論理的に分離し、複数のコンテナで共有して使います。
この区画のことをコンテナと言いい。コンテナを実現する技術をコンテナ仮想化技術と呼びます。
コンテナはオーバーヘッドが少ないため、軽量で高速に動きます。また、アプリケーションの開発環境や実行環境をパッケージ化して、迅速に配備したり破棄することも可能です。

コンテナ仮想化技術のイメージ図
コンテナ .png

Dockerとは

コンテナ仮想化技術で、アプリケーションの実行と管理を行うためのオープンソースプラットフォームです。
以下のような特徴があります。

  • Linux上で動作する
  • GO言語で書かれている。

記事を書いている段階で、Dockerはコンテナ仮想化技術のデファクトスタンダードになっています。
DockerではOSの上にDockerデーモンと呼ばれるコンテナ管理ソフトウェアを立てて、その上にコンテナを構築します。
コンテナはアプリケーションorライブラリー/ミドルウェアやOS、ネットワークの設定などをひとまとめにしたDockerイメージから作成します。また、作成したコンテナをイメージにすることも可能です。Dockerイメージの正体はアプリケーション実行に必要なファイル群が格納されたディレクトリです。

Dockerを支える仕組み

区画化の仕組み

Dockerの区画化には、Linuxのnamespace機能を用いています。
名前を付けることで、以下のようなプロパティをコンテナに隔離しています。

  • PID
    • プロセスごとのID
  • Network
    • ネットワークディバイス、IPアドレス、ポート番号、ルーティングテーブル、フィルタリングテーブル
  • UID、GID
  • ユーザーID、グループID
  • Mount
    • マウントシステム
  • UTS
    • ホスト名、ドメイン名
  • IPC
    • プロセス間通信のオブジェクト

リソース管理の仕組み

区画化されたリソースの管理は、Linuxの cgroup の仕組みを用いています。cgroup はプロセスをグループピングして管理する仕組みです。cgroup を用いてコンテナが使用できるリソースを制限することで、ホストのリソースを食い尽くすことを防いでいます。

ネットワークの仕組み

コンテナ間の通信

Dockerではコンテナごとに仮想NICが割り当てられています。この仮想NICはdocker0と呼ばれる仮想ブリッジに接続されており、コンテナ同士の通信を行います。
なお、コンテナどうしの通信にはリンク機能が用いられます。Dockerコンテナにはエイリアスを付けることができ、リンク機能ではそのエイリアスを用いたコンテナ間の通信を可能にします。

コンテナと外部ネットワークの通信

DockerではNAPT(Network Address Port Translation)の機能を使って外部ネットワークに接続します。
NAPTはIPアドレスと、ポート番号を変換する機能で、プライベートアドレスとグローバルアドレスを透過的に変換します。

Dockerのメリット

移植性

開発環境や実行環境をパッケージ化することによって、Dockerの動作環境とDockerイメージがあればどこでも同じコンテナを作成することができます。これは開発環境の統一に役立ちます。

共有

DockerHubでは作成したDockerイメージを共有できます。また、DockerHubではOSSの公式イメージなどを使えば、比較的簡単にOSSを利用できたりします。

dokcer-compose

Dokcerコンテナは、通常一つでは完結せず、複数のコンテナの連携によって、1つのシステムを構築します。
ここで、一つ一つのコンテナを手動で設定し起動を行っていると非常に手間になることがあります。ここで登場するのがdocker-conpose です。docker-composeではコンテナの一括、構築、管理、連携などを行うことができます。

終わりに(感想?)

今回はそもそもDockerとはというところから始め、Dockerが動く仕組み、メリット、Dockerコンテナを実際に構築する際のツールなどについて調べてまとめました。
開発環境の構築などでDokcerを使うならdokcer-composeで間に合いそうですが。実際のプロダクトだと、Kubernetesなどのコンテナオーケストレーションと呼ばれるものが使われていたり、Kubernetes環境をクラウドで構築するGKE(Google Kubernetes Engine)等が利用されたりします。
機会があれば、そっちも調べてまとめてみようと思います。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?