Dockerってなんだ?_2020/10/22

*備忘録注意です。

Dockerについて

Dockerはインフラ関係やDevOpsの世界で注目されている
技術の一つで、Docker社が開発しているコンテナ型の仮想環境を
作成・配布・実行するためのプラットフォームです。
DockerはLinuxのコンテナ技術を使ったもので
よく仮想マシンと比較がされています。
VirtualBoxなどの仮想マシンでは
ホストマシン上でハイパーバイザーを利用し
ゲストOSを動かしその上でミドルウェアなどを動かします。
それに対し、コンテナはホストマシンのカーネルを利用し
プロセスやユーザーなどを隔離することで
まるで別のマシンを動かしているようにできます。
そのため、軽量で高速に起動・停止が可能です。

*DevOpsとは

開発チームを指す「Development」と、
運用チームを指す「Operations」という
2つの言葉を掛け合わせえた造語です。
 ソフトウェア開発の現場では、
製品に新しい機能やサービスを開発・追加するチームと、
安定したサービスを提供するためのチームが存在します。
詳細はこちらへ

*仮想化について

仮想化とは機器の持つ機能や能力、
容量などをソフトウェア的に分割あるいは統合し、
複数の機器をまとめて一台のように振る舞わせたり、
一台の機器を分割して複数の独立した仮想的な機器として
振る舞わせる技術である(通常は後者の分割を指す)
詳細はこちらへ

*ハイパーバイザーについて

ハイパーバイザーとは、コンピュータを仮想化し、
複数の異なるオペレーティングシステム(OS)を互いに
干渉させずに並行して動作させられるようにするソフトウェア。
詳細はこちらへ

*ミドルウェアについて

ミドルウェアとは、ソフトウェアの種類の一つで、
オペレーティングシステム(OS)と
アプリケーションソフトの中間に位置し、
様々なソフトウェアから共通して利用される機能を提供するもの。
詳細はこちらへ

*カーネルについて

OS(オペレーティングシステム)の中核を構成するソフトウェア。
動作中のプログラムの実行状態を管理したり、
ハードウェア資源を管理してアプリケーションソフトが
ハードウェアの機能を利用する手段を提供したりする。
詳細はこちらへ

画像1

(他サイトより引用)
こんな感じらしいです。
また、Dockerはミドルウェアのインストールや
様々な環境設定をコード化して管理します。
これは
Infrastracture as Code(laC)
「インフラストラクチャー・アズ・コード」と呼ばれていて
ソフトウェア開発で実施されてきた構成の管理・自動化などを
サーバーの各種設定や
ミドルウェアのインストールなどに適用したものです。
以下の利点としては
・コード化されたファイルを共有する事で
 どこでも誰でも同じ環境が作れる。
・作成した環境を配布しやすい。
・スクラップ&ビルドが容易にできる。
・開発環境(Windows上)では動いていたけどLinuxで
 動かなかったといったケースも
 開発工程からDockerを活用していく事で防ぎやすくなります。

*スクラップ&ビルドとは

老朽化して非効率な工場設備や行政機構を廃棄・廃止して、
新しい生産施設・行政機構におきかえることによって、
生産設備・行政機構の集中化、効率化などを実現すること。

それに開発工程で使っていた環境を
そのまま本番環境へ持っていくこともできるので
環境差分が少なくなり問題を減らすことが可能です。
また作成したDockerイメージを他の人にも渡して使ってもらうことで
各自の環境のバージョンずれ防止・環境準備の短縮にもつながります。
またクラスタ構成を構築する場合も
Dockerイメージがあればそれを起動する名前(コンテナ名)などを
変えるだけで複数の環境(コンテナ)を起動を起動できるので
最初から手順に沿って環境を作る作業もなくなり
クラスタ構成を構築するのも容易になります。
これはコンテナを管理するオーケストレーションツールを使うことで
より運用が楽になります。

*クラスタ構成とは

複数のコンピュータが連結され、
利用者や他のコンピュータに対して
全体で1台のコンピュータであるかのように振舞うシステム。
そのようなシステムを構築することを
「クラスタリング」(クラスタ化)という。
詳細はこちらへ

*オーケストレーションツールとは

オーケストレーションとは、コンピュータシステム、アプリケーション、
およびサービスにおける、設定、管理、調整の自動化を意味します。
つまり、自動化するためのアプリという事ですね。

最近ではKubernetes(クーベルネテス?)が注目を浴びていてDockerでネイティブでサポートされることになり話題になりました。
さらに、①コード化したもの(Dockerfile)を構成管理し
それを②CIツール(JenkinsやCircleCI等)で
③ビルド(Dockerイメージの作成)
して④デプロイ(コンテナの起動)・⑤環境のテスト(Serverspec等)
⑥画面試験(Selenium等)を毎日実行すれば環境面の確認も含めて安心して
開発を進められるようにもあります。
このサイクルを回せると(①→②→③→④→⑤→⑥)
いざ環境を構築するとなった際に
「アプリを動かすのに何のパッケージが必要なの?」
と慌てる事も減らせるし
開発・リリースサイクルも安定してくると思います。
このようにDockerを使う事で安定した開発を進めたり
リリースサイクルの改善にも役立ちます。

今日はここまで!

この記事が気に入ったらサポートをしてみませんか?