# Docker入門② ###### tags: `Docker` # Dockerが動く仕組み ## Dockerが動く仕組み ### Dockerno仕組み - ざっくりとDockerの環境はこのような構成で動いている ![](https://i.imgur.com/3uMWU4Z.jpg) ### Dockerのコンテナの中には、OSっぽいものが入っている - 「コンテナに何かを入れる」と表現すると、空っぽのコンテナに何かを入れるようなイメージがあるかもしれないが、「本当の空のコンテナ」は使わないに近い :::warning 🐝 scratchというイメージを使うと「本当に空のコンテナ」が作成できる ::: - コンテナには必ず「LinuxOSっぽいもの」が必ず入っている - 「OSっぽい」ものであって、完全なOSではないものが入っている ### そもそもOSは何をしているのか - OSとは、プログラムやソフトウェアの命令をハードウェアに伝える役割を担うもの ![](https://i.imgur.com/4hwRJaU.jpg) - OSは「カーネル」と呼ばれる核になる部分と、「その周辺の部分」で構成されている - 「周辺の部分」が、プログラムからの命令を受けて「カーネル」に伝えて、「カーネル」がハードウェアを操作する - Dockerの場合、コンテナはハードウェアと完全に分離されているので、土台となる「LinuxOSの周辺部分」がコンテナの中に入っている - そして、コンテナの中の「LinuxOSの周辺部分」が受け取った命令を土台のカーネルに伝える仕組みになっている ![](https://i.imgur.com/RQrY1Zn.jpg) ### Dockerは基本的にLinux用に作られたもの - DockerはLinuxを利用する前提の仕組みなので、Linuxでないと動かない - コンテナの中に入れるソフトウェアもLinux用ソフトウェア - コンテナにmacOSやWindowsのソフトウェアを入れることはできない(入れても動かない) ### WindowsやmacでDockerを動かすには 1. 仮想環境にLinuxを入れてその中で動かす 2. 「Docker Desktop for Windows」か「Docker Desktop for Mac」を入れる ## DockerHubとイメージとコンテナ ### イメージとコンテナ #### イメージとは金型のようなもの - イメージは金型のようなもので、1つあれば同じコンテナを量産できる #### コンテナからもイメージを作成できる - 作成したコンテナからイメージを作成できて、それをまた量産できる #### DockerからDockerへ移動できる - 1つのイメージで、動かすマシン違っても同じコンテナが作成できる ### DockerHub とイメージ - よく使われるイメージは既に用意されていて、DockerHubから入手することができる - DockerHubはイメージの保管場所であり、配布場所である ### DockerHubに公開されてるイメージ - OSっぽいもの - ソフトが入ったもの - ソフトが複数入ったもの - Linux系はほとんど網羅している - CentOSだけでもバージョンが複数ある ### 安全がコンテナイメージの選び方 - Docker公式 - ソフトウェアを作成・管理している企業や団体 - もちろん自分でカスタムできる ### いろいろな組み合わせが考えられるコンテナ - Dockerの特徴的な使い方に、「1コンテナ = 1アプリ」という考え方がある - だけど、1つのコンテナに複数のソフトウェアを入れてもOK ![](https://i.imgur.com/Nj2FgLO.jpg) - でも、「1コンテナ = 1アプリ」の方がメンテナンスフリーだよねって話 # Dockerコンテナのライフサイクルとデータの保存 ## Dockerコンテナは作って捨てる - 1つのコンテナをアップデートしながら使うのではなく、アップデートされたソフトウェア入りのコンテナ入りの新しいコンテナを作ってそれに乗り換える - 作る→起動する→停止する→破棄する→作る→・・・・という一連の流れを「コンテナのライフサイクル」という ### データの保存 - コンテナを破棄したとき、Dockerをインストールしている物理的なマシン(ホストマシン)のディスクにマウントして、そこに保存していく - コンテナを捨てても、データを安全なDocker外部にあり消えることはない ## Dockerのメリットとデメリット ### Dockerの構造と性質 - 隔離できる - 独立している - コンテナを複数載せられる - 同じアプリを入れられる - コンテナをイメージ化できる - コンテナを持ち運べる - コンテナの複製を作りやすい - 移行が楽 - 開発環境を配布しやすい - Dockerレジストリ(DockerHub) - イメージもらうだけで環境構築 - 自分で一からやる必要がない - コンテナを入れ替えやすい - アップデートしやすい - ソフトを入れ替えしやすい - カーネルがない - 軽い - ディストリビューションを変えられる ### Dockerのメリットとデメリット #### メリット - 1台の物理的なマシンに複数のサーバーを載せられる - サーバーの管理がしやすい - サーバーの玄人でなくても扱いやすい #### デメリット - Linux限定であること - ホストマシンがダメになるとDockerもダメになる - コンテナ1つのために運用するには向いてない ### Dockerの使い道 - 同じ開発環境を複数用意するとき - 開発メンバーのOSが異なっているとき - OSやライブラリの新バージョンが出た時に、実験用として新しい環境を作って試す