「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Linux]] --[[言語等に依存しない汎用開発支援ツール]] *目次 [#n5ee47e4] #contents *概要 [#b455eff1] -[[Linuxコンテナ>#c0b2e7af]]を使った、主にソフトウェアの自動デプロイメント(展開)を支援するシステム -dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開 -[[Docker for Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20for%20Windows]] は [[Linuxコンテナ>#c0b2e7af]]と[[WindowServerコンテナ>https://techinfoofmicrosofttech.osscons.jp/index.php?Windows%20Server%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A]]のフロント+αの機能を提供する。 *Linuxコンテナ [#c0b2e7af] Linuxネイティブなコンテナ。 **方式 [#p5c8e3f3] -Linux OSの持つコンテナ機能やリソースの管理機能などをベースに作られた、コンテナ型の仮想化技術 -[[VSSでも使用しているCopy on Writeの仕組み>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98#o8de7bcd]]をUnionFileSystemの機能で実現し、コンテナ型の仮想化を行っている。 -コンテナ自体は、Dockerが登場する以前から存在し、古くから商用製品にも採用されている技術。 -一般的に、Linux OS上での分離された空間を「Linuxコンテナ」と呼び、Linuxコンテナは、一般的に、LXCとも呼ばれる。 **特徴 [#kc543dbe] -マシン全体を仮想化する仮想化技術と比べると、~ コンテナによる仮想化は軽量・高速で、実行に必要なリソースも少なくて済む。 -システムの構成変更や展開の容易さなどから、~ 開発段階から実運用環境まで、幅広く利用されている。 -コンテナ上で動作するプログラムは、基本的にはLinuxのバイナリ。 **Dockerコンテナ [#u4d4949f] -古いバージョンのDockerは、[[Linuxコンテナ>#c0b2e7af]]を使っていたため、~ [[Linuxコンテナ>#c0b2e7af]]もDockerコンテナも同一のものとして考えても差し支えなかった。 -現在のDockerは、libcontainerを利用するようになり、~ [[Linuxコンテナ>#c0b2e7af]]に依存する部分が無くなった。 -このため、[[Linuxコンテナ>#c0b2e7af]]とDockerコンテナは、同じものではないが、考え方という観点では、~ [[Linuxコンテナ>#c0b2e7af]]もDockerコンテナも、同様の分離された空間を提供することには違いがない。 -参考 --コンテナ技術の基礎知識 | Think IT(シンクイット)~ https://thinkit.co.jp/story/2015/08/11/6285 *機能 [#j9abf453] **Build [#t78af897] コンテナ・イメージ([[Dockerイメージ>#vee01503]])をビルドする機能 -コマンドを使用してBuildできる。 -基本的には、[[Dockerファイル>#ea5191dc]]を使用してBuildする。 -[[前述のCopy on Writeの仕組み>#c0b2e7af]]で[[Dockerイメージ>#vee01503]]を重ね合わせる事が出来る。 **Ship [#bde7ac36] [[Dockerイメージ>#vee01503]]を共有する機能~ (コンテナを積む、輸送するイメージ) -Buildした[[Dockerイメージ>#vee01503]] は [[Dockerレジストリ>#hff8c9d7]]で共有できる。 -改ざん検知や、脆弱性スキャン機能を持つ。 **Run [#j4bf1913] [[Dockerコンテナ>#u4d4949f]] で [[Dockerイメージ>#vee01503]]を実行させる機能 -プロダクション環境では複数のホストで動作させる。 -これには、オーケストレーション・ツールを利用する。 *サブシステム [#n397cba0] **イメージ [#sb48ec65] ***[[Dockerファイル]] [#ea5191dc] [[Dockerイメージ>#vee01503]]を作成するファイル。 ***Docker multi stage build [#o9bb2f8b] -Docker 17.05で導入された革新的な機能。 -[[Build>#t78af897]]を複数に分割して実行できる。 -今までも手動で複数の[[Dockerファイル>#ea5191dc]]を組み合わせればできたが、~ 1ファイルで書けるようになり気軽に中間[[イメージ>#vee01503]]を色々使えるようになった。 -ユースケース --依存関係の分離 ---開発用ビルドの依存 ---ランタイムの依存 --, etc. ***Dockerイメージ [#vee01503] -ベースイメージに[[Copy on Write>#c0b2e7af]]した差分。 -[[Dockerイメージ>#vee01503]]を使用して[[Dockerコンテナ>#u4d4949f]]を起動する。 -イメージ・レイヤが上層に積み上げられる。 ***[[Dockerレジストリ]] [#hff8c9d7] 「Docker」向けに、作成した[[Dockerイメージ>#vee01503]]を公開するサービス **クライアント [#ea8eb7dc] ***[[Dockerコマンド]] [#jbff7b71] ***[[Kitematic]] [#pb50332d] **サーバ [#p5449adb] ***Docker Engine (エンジン) [#w04476f3] -[[Dockerイメージ>#vee01503]]の作成と[[Dockerコンテナ>#u4d4949f]]の実行に必要なコア機能を提供。 -この機能に関しては、[[Dockerコマンド>#jbff7b71]]から確認できる。 ***Docker Swarm (スウォーム) [#u512f6bd] -ホストのクラスタリングと[[Dockerコンテナ>#u4d4949f]]のスケジューリングをする。 -クラスタは主に複数のマスター (master) とノード (node) から構成される。 -Docker Swarmは[[K8sも利用可能(K8sもmasterとnodeから構成される)>Kubernetes#xbc57197]]。 ***[[Docker Compose (コンポーズ)>Dockerコンポーズ]] [#n7abbd38] 複数の[[Dockerコンテナ>#u4d4949f]]を使うアプリケーションを定義する。 ***Docker Machine (マシン) [#p8e6e858] 自分のネットワークやクラウド上に、自動的に[[Dockerコンテナ>#u4d4949f]]をデプロイする。 ***Dockerデーモン [#be9eca12] Dockerデーモンに[[Dockerイメージ>#vee01503]]の実行を要求すると、Dockerデーモンは、 -実行する[[Dockerイメージ>#vee01503]]の正しいバージョンを持っていることを確認する。 -持っていない場合、指定された[[Dockerレジストリ>#hff8c9d7]]から引き出す。 -Dockerデーモンに[[Dockerイメージ>#vee01503]]の実行を要求する。 -この実行では、構築・実行・[[Dockerコンテナ>#u4d4949f]]の配付を行う。 -この動作をカスタマイズするにはいくつかの方法がある。 --イメージを指定する際 --イメージ・プルポリシー *仕組み [#h396aff2] **名前空間 [#wffae207] Linuxのnamespace機能は、~ オブジェクトに対する名前付けにより隔離機能を提供する。 ***PID namespace [#dab38798] -オブジェクト : LinuxのプロセスID -コンテナ内で、同じPIDを使用できるなど。 ***Network namespace [#g18c133f] -オブジェクト --ネットワークデバイス、IPアドレス、ポート番号 --ルーティング・テーブル、フィルタリング・テーブル -コンテナ内で、同じポート番号を使用できるなど。 ***UID namespace [#o1d2339a] -オブジェクト : LinuxのユーザID -ホスト、コンテナでの隔離する。~ (アカウントを異なる権限でマップする。) ***Mount namespace [#fafef6e4] -オブジェクト : ファイルシステム -ホスト、コンテナでの隔離する。 ***UTS namespace [#fc68335f] -オブジェクト : Unix Time-sharing System(現在は既にその意味は失われている) -システム識別子(nodename 及び domainname)を隔離する。 ***IPC namespace [#i3390c7a] -オブジェクト : プロセス間通信(IPC)オブジェクト --共有メモリ、メッセージキュー --スレッド同期ツールキット -コンテナ内で、IPCオブジェクトを隔離する。 **リソース管理 [#bde67ee9] Linuxのcgroups機能は、リソース管理機能を提供する。 ***リソース [#l5fc6f6f] -CPU : cgroup 内のタスクによって使用されるCPUリソースの --cpu : 使用量の制限 --cpuacct : 自動レポートを生成 --cpuset : 配置をセット -memory : cgroup 内のタスクによって使用されるメモリ・リソースの --自動レポートを生成 --メモリ使用の上限設定 -device : cgroup 内のタスクによるデバイスへのアクセス許可・拒否 -freezer : cgroup 内のタスクを一時停止あるいは再開 -net_cls : ネットワークパケットをタグ付け -blkio : cgroup 内のタスクによる、ブロックデバイス上の I/O へのアクセスを制御・監視 ***管理機能 [#ob942683] プロセスをグループ化して管理可能 ルート ┬-> ユーザ・アプリ ┬-> エディタ │ └-> 自作アプリ │ └-> デーモン・アプリ ┬-> WWWサーバ ├-> APサーバ └-> DBサーバ **ネットワーク構成 [#h8242c15] ***ホスト毎 [#a9224dd3] -物理NIC(eth0) --ホストのNIC --ホストがVMだったら仮想NICでは? -[[NAPT>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%A9%9F%E5%99%A8%E4%B8%80%E8%A6%A7#a4d3188c]](ip tables)~ ホストの8080 → コンテナの80 -仮想ブリッジ(docker0) ***コンテナ毎 [#p90b20ec] -仮想NIC(veth xxx) --Veth pair (Virtual ethernet tunnel pair) --Linux には、OpenVZ由来の Virtual Ethernet Tunnel (veth) というものがある。~ 名前が示す通り、仮想的な Ethernet Interface の組を作成して、繋いでくれる。 -仮想NIC(eth0) --コンテナのNIC --veth xxxとペア。 **ストレージ・ドライバ [#m976ee3e] -[[前述のCopy on Writeの仕組み>#c0b2e7af]]を提供する。 -コンテナ化されたアプリケーションの性能に影響を与える。 -参考 --Dockerのストレージドライバを理解する - Qiita~ https://qiita.com/NaotoHanaue/items/b9f395a63f7aae2a41b7 --ストレージ・ドライバの選択 — Docker-docs-ja ドキュメント~ http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html ***AUFS [#k0a4dfe7] ***Btrfs [#ic6fd28f] ***Device Mapper [#kd7d6b89] ***OverlayFS [#z132b1a1] ***ZFS [#y4af509e] *エディション [#w6eba6bc] **CE [#qa8ccb65] -無償 -サポートが不要な環境で使用する。 **EE [#o8b0135f] -有償 -種類 --Basic ---サポート ---認証済コンテナ ---認証済みプラグイン --Standard ---Basicに加え ---LDAP、AD統合機能 --Advanced ---Standardに加え ---セキュリティ機能 *インストール [#scdc282d] **CentOS [#sa932048] **Ubuntu [#sb89f322] **[[Windowsから>https://techinfoofmicrosofttech.osscons.jp/index.php?Visual%20Studio%20Tools%20for%20Docker]] [#ff72b53b] *利用 [#c4bc3de4] **CentOS [#m2d151b3] **Ubuntu [#xbfee1d5] **[[Windowsから>https://techinfoofmicrosofttech.osscons.jp/index.php?Visual%20Studio%20Tools%20for%20Docker]] [#i9200678] *参考 [#j992b74c] **内部リンク [#ifb499fa] ***[[Dockerコマンド]] [#mf85798b] ***[[Dockerレジストリ]] [#w9cc8f93] ***[[Dockerコンポーズ]] [#b309c915] ***[[Kubernetes]] [#he4d169a] **Docker Documentation [#nef96f68] -Docker ドキュメント日本語化プロジェクト~ Docker-docs-ja 17.06.Beta ドキュメント~ http://docs.docker.jp/index.html ***Compose file [#y7bdd83a] -Compose file version 3 reference~ https://docs.docker.com/compose/compose-file/ **@IT [#w0642cbd] -Tech Basics/Keyword:Docker~ http://www.atmarkit.co.jp/ait/articles/1407/14/news122.html ***いまさら聞けないDocker入門 [#t6eefae5] http://www.atmarkit.co.jp/ait/series/1511/ -(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識~ http://www.atmarkit.co.jp/ait/articles/1405/16/news032.html -(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方~ http://www.atmarkit.co.jp/ait/articles/1406/10/news031.html -(3):Dockerfileとdocker buildコマンドでDockerイメージの作成~ http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html -(終):Docker Hubの使い方とGitHubからのDockerイメージ自動ビルド~ http://www.atmarkit.co.jp/ait/articles/1408/26/news038.html ***超入門Docker [#md43f3b7] http://www.atmarkit.co.jp/ait/series/5086/index.html -第1回 Dockerとは~ http://www.atmarkit.co.jp/ait/articles/1701/30/news037.html -第2回 Dockerを使ってみる~ http://www.atmarkit.co.jp/ait/articles/1701/31/news043.html -第3回 Dockerコマンドの使い方~ http://www.atmarkit.co.jp/ait/articles/1702/01/news061.html -最終回 Windowsプログラムを実行するWindowsコンテナ~ http://www.atmarkit.co.jp/ait/articles/1702/02/news039.html ※ この記事は、Windows寄りになっている。 ***山市良のうぃんどうず日記 [#i9be6f03] -(31:特別編)所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門~ http://www.atmarkit.co.jp/ait/articles/1504/13/news020.html **see the elephant [#xde9471a] -dockerを触ってみる~ http://namu-r21.hatenablog.com/entry/2016/10/15/124009 -dockerが使うUnionFileSystemを僕なりに解釈した~ http://namu-r21.hatenablog.com/entry/2016/10/27/013006 -dockerのファイルシステムについて知る~ http://namu-r21.hatenablog.com/entry/2016/10/25/160147 **さくらのナレッジ [#s3864708] -Dockerコンテナをクラウドサービス上で共有できる「Docker Hub」を使ってみる~ https://knowledge.sakura.ad.jp/2210/ --DockerとDocker Hubの操作と概念~ https://www.slideshare.net/zembutsu/docker-container-image-command-introduction-2017-03 **Qiita [#se48f3bb] -Dockerの日本語ドキュメント~ https://qiita.com/maemori/items/dd162002fbdd53d5582a -Dockerコンテナとイメージを簡易的に理解する~ https://qiita.com/horikeso/items/b9456a529444ff1ed547 ***docker-compose コマンド [#feeada98] -docker-compose コマンドまとめ~ https://qiita.com/aild_arch_bfmv/items/d47caf37b79e855af95f -Docker Compose - docker-compose.yml リファレンス~ https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa ***コンテナ内で操作 [#p3013626] -Dockerコンテナ内で操作 attachとexecの違い~ https://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560 -Docker | docker コンテナの中で vim が使えない場合~ https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e -ツール類のインストール --apt-get~ 「are you root?」となる場合は、先頭にsodoを付与。 apt-get update apt-get install XXX --yum yum install XXX ***Docker multi stage build [#gc400d8a] -Docker multi stage buildで変わるDockerfileの常識~ https://qiita.com/minamijoyo/items/711704e85b45ff5d6405