# Docker入門① ###### tags: `Docker` # Docker ## Dockerって何それ美味しいの? ### Dockerとは - データやプログラムを隔離できる仕組み - 主にサーバーで使われる - 複数のプログラムやデータを、それぞれ独立した環境に隔離できるのがDocker - プログラムやデータだけでなくOSレベルで隔離できる >コンテナ基盤 >AWSでいうと >ECSのコンテナ基盤のiamge >EKSのクバネてぃすのimage >などなど >GCPでいうと >GKE ### コンテナとは - サーバーの環境をイナバ物置のような細かい部屋に分けたようなもの - コンテナを使える仕組みがDocker - Docker使うにはDockerエンジンが必要 - Dockerエンジンでコンテナを生成したり、起動させたりする ### コンテナはイメージ(image)から作る - コンテナの素になるのがイメージ - 使いたいサーバーのイメージを使う(MySQLのサーバーとかApacheのサーバーとか) - コンテナは複数作ることができて、容量が許す限りDockerの上にいくつも載せることができる ### DockerはLinuxで動かす ![](https://i.imgur.com/INV5Bb6.jpg) ### なぜデータやプログラムを隔離する必要があるのか - 多くのプログラムは、それ単独で動いてるのではなく、何らかの実行環境やライブラリ、他のプログラムを利用して動いている - ソフトウェアも1つのプログラムではなく、複数のプログラムで構成されていることが多い - また他のプログラムと特定のディレクトリを共有していたり、同じ場所に設定情報を書きこんでいる場合もある :::warning 🐝 1つのプログラムがアップデートした時に他のプログラムに影響を及ぼしたりすることが起きてしまう ::: - 共有しているライブラリが双方に依存しているため、それぞれが特定のバージョンでしか動かないこともある - そのためソフトウェアごとの環境を隔離しておく必要がある ## サーバーとDocker ### サーバーには2種類の意味がある 1. 機能としてのサーバー(メールサーバー、WEBサーバー、APIサーバー) 2. 物理的なマシンのサーバー(オンプレ) :::info 🍀 サーバーとPCは同義であるが、PCは個人が使うもので、サーバーは複数人がアクセスして使うもの ::: ### サーバーのOSはLinuxが多数 - 普段使っているサーバーとPCはさほど大きな違いがない - 物理的なマシンガあって、それを動かすOSがあって、そこにソフトウェアを入れる - サーバー用のOSにはLinuxが採用されることが多い - Windows系 - Windows - UNIX系 - Linux系 - Red Hat系 - Red Hat - CentOS - Debian系 - Debian - Ubuntu - Fedora - BSD系 - macOS - FreeBSD - NetBSD - Solaris系 - Solaris - OpenSolaris ### コンテナで複数のサーバー機能を安全に同居させることができる - 通常1台のサーバーマシンには、1つのWEBサーバーやデータベースサーバーしか載せられない(v10.30.0だけとか) - Dockerのコンテナ技術を使うと、複数のWEBサーバーを作ることができる ![](https://i.imgur.com/31DPhf4.jpg) - 複数の同じサーバー機能を1つのマシンに入れることは、サーバーの節約にもつながる - これまで1サービスに1台のサーバーマシンを用意していたが、1台のサーバーマシンに複数のサービスを提供できるサーバーを作ることができるようになる ### コンテナは持ち運びが可能 - 開発環境を本番環境へ持ち運んだり、AさんのPCからBさんのPCに移すことができる - 物理的な環境の違いや、サーバー構築の違いを無視することができる :::danger 🚨 🚨 🚨  Dockerは仮想化技術ではない 🚨 🚨 🚨 :::