きょうは Docker を学びます。
Docker とは コンテナ型の仮想環境を作るプラットフォーム のことです。
いま Docker が大流行しています。えらいけったいな名前のプログラミングやけど、なぜこんなに流行っているのでしょうか?
それは流行ってるから流行るのだと思います。
複数マシンにコンテナを配置できるなんてすごいこと。
きょうはあなたと、 Docker のアプリの配布と仕組み、コンテナでどうやって利用するのかを学習します。
1.Docker とは?
Dockerは、アプリケーションをコンテナ化するためのオープンソースのプラットフォームですごく流行しています。
でも流行るには原因があって、例えば「アプリA」と「アプリB」を競合させないためとか、ドッカーをつかえば、それらが分散できるのであれば、WordPress にも「Docker」と書くだけで実行できてしまう。
1.アプリケーションを仮想化された環境で実行できる
Dockerは、アプリケーションが実行される環境をコンテナとしてパッケージ化します。コンテナは、環境とアプリケーションの両方を含んでいるため、移植性が高く、実行環境の差異による問題を回避することができます。
また、Dockerは、アプリケーションを素早く、簡単に配布するための機能を提供しています。Dockerイメージと呼ばれるパッケージを作成することで、アプリケーションを簡単に共有できます。
さらに、Dockerは、複数のアプリケーションを単一のホスト上で実行するための仮想化技術としても使用されます。Dockerコンテナは、仮想マシンよりも軽量であり、リソースを効率的に利用することができます。
このような特徴から、Dockerは、アプリケーションの開発、テスト、デプロイメントにおいて、人気のあるツールとなっています。
2.Dockerは、オープンソースソフトウェア(OSS)です。
インフラという、社会の基盤となる、私たちの生活に密着したサービス・仕組みを提供する業界や DevOps(デブオプス)といわれる開発担当と運用担当が連携・協力し、柔軟に、素早く開発するソフトウェアの開発手法です。
Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
コンピュータの上にコンピュータをつくるーーーこれが仮想化技術です。Docker は、OS 上のコンテナ技術のひとつです。これらの技術の凄いところは、コンピュータの処理能力細かく分割できる、そしてそれらを抽象的に扱うことができて、効率化できることにあります。
開発と運用で、他のアプリや部門との連携を持たずに自己完結して孤立してしまう状態を解消します。この着手を採用すると、アプリやサービスの開発を加速できます。
イメージとしてはこんな感じでしょうか。
3.Dockerが便利な理由
Docker はん、ほんまに便利やで!例えば、アプリ開発する時にめっちゃ役立つんや。普通やったら、開発環境整えるのに時間かかるけど、Docker 使うと、コンテナっていう箱に環境まとめて入れとけるんや。これやと、どのパソコンでも同じ環境で動かせるから、開発チーム全員が同じ条件で作業できるんやで。
それに、いろんなアプリのバージョンとか依存関係がごちゃごちゃにならへん。例えば、Python のバージョン違うと動かんとか、そんな問題も Docker 使えば解決や。
あと、デプロイ(本番環境にアプリを配置すること)もめっちゃ楽なんや。コンテナにまとめたアプリをそのまま本番環境に持っていけるから、動作確認も楽々やで。ほんで、何か問題あったらすぐに元に戻せるんも安心やな。
ほんま、Docker はんのおかげで開発がめっちゃスムーズになるし、トラブルも少なくて済むから、めっちゃ頼りになるで!
Docker の特徴
Dockerはコンテナ化されたアプリケーションをパッケージングし、依存関係やランタイム環境を含めて一つの単位で提供します。これにより、開発環境やプロダクション環境など、異なる環境でもアプリケーションを簡単に移植することができます。また、異なるプラットフォーム(Windows、Linux、Macなど)で動作するコンテナも作成できます。
通常、仮想マシンはホストOS上で完全なゲストOSを実行しますが、DockerはホストOSのカーネルを共有するコンテナを実行します。これにより、ゲストOSの起動やリソースの消費を最小限に抑えることができます。さらに、コンテナは軽量で高速に起動・停止できるため、リソースの効率的な利用が可能です。
そしてコンテナを利用してアプリケーションを分割し、マイクロサービスとして実行することができます。これにより、必要に応じて各コンポーネントのインスタンス数を迅速にスケールアップ・スケールダウンできます。また、Docker SwarmやKubernetesなどのオーケストレーションツールを使用することで、複数のホストでのコンテナの管理やスケーリングが容易になります。
コンテナ技術
さらにアプリケーションの実行に必要な依存関係や設定をコンテナに固めることができます。このため、開発環境と本番環境の一貫性を維持することができます。さらに、チーム内での開発やテストの一貫性を確保するために、Dockerイメージを共有することもできます。
また、コンテナごとにリソースを分離するため、アプリケーション間の相互干渉を最小限に抑えることができます。これにより、異なるアプリケーションやサービスを同じホスト上で安全に実行することができます。また、Dockerはコンテナのイメージを元に起動するため、セキュリティパッチやアップデートの管理が容易です。
これらの特徴により、Dockerはアプリケーションの開発、デプロイメント、スケーリング、管理を容易にし、効率化することができます。また、Docker Hubなどの公式レジストリからイメージを入手できるため、既存のコミュニティやエコシステムとの連携も容易です。
Dockerは、Linux のコンテナ技術を使ったものです。Linuxとは、Windows やMac OS
と同じ OS で、ソフトとハードをつなぐ役割を担っています。データがハードウェアへ正しく記録・保存されたり、保存したデータを読み込んで閲覧できたりするのは、OSが機能しているからです。
Windows11や Mac OSと異なるのは、Linuxは「無料で使えるオープンソース」です。
4.仮想マシン
Dockerの仮想マシンは、Dockerコンテナを実行するための環境を提供する仮想化技術の一つです。通常、Dockerはホストオペレーティングシステムを直接利用してコンテナを実行するため、追加の仮想化ソフトウェアを必要としません。しかし、一部の状況ではホストオペレーティングシステムとの互換性の問題やセキュリティ上の理由から、仮想マシンを使用することがあります。
Dockerの仮想マシンでは、ホストマシン上に仮想的な環境を作成し、その中でDockerエンジンを実行します。この仮想マシンは、ホストマシンのリソースを仮想化し、Dockerコンテナが独立して実行できるようにします。仮想マシン内のDockerエンジンは、Dockerコンテナを管理し、イメージの作成や実行、ネットワーキングなどの操作を提供します。
仮想マシンを使用する主な利点は
異なるオペレーティングシステムやカーネルのバージョンを持つ複数のコンテナを実行する場合における環境の分離です。ホストマシンとは異なるカーネルを持つ仮想マシンを使用することで、異なるオペレーティングシステム上での実行や、特定のカーネル機能を必要とするアプリケーションの実行が可能となります。
一般的に、Dockerの仮想マシンとしてよく知られているのは「Docker Desktop for Mac」「Docker Desktop for Windows」などのツールです。これらのツールは、MacやWindows上でDockerを実行するために仮想マシンを提供します。
仮想マシンでは、ホストコンピュータ上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。仮想とは、動作しているOSの上で、もう1つのOS・サーバーを立ち上げることです。これで1台のサーバーをより効率的に使い回すことできるようになります。
「仮想化」とは、この際、元のOSを「ホストOS」、ホストOS上で動作しているOSを「ゲストOS」と呼称することがあります。ホストコンピュータとは、ネットワークの中心となるコンピュータで、電子メールの送信、受信などに必要な処理のほとんどを行います。
5.コンテナ
Docker は、コンテナと呼ばれる標準化されたユニットにソフトウェアをパッケージ化します。
Dockerのコンテナは、アプリケーションやサービスを実行するための独立した実行環境です。コンテナは、アプリケーションやその依存関係、ライブラリ、設定など、必要なすべての要素を含む軽量でポータブルなパッケージです。Dockerエンジンによって管理され、ホストマシン上のリソースを共有しながら仮想化された環境で実行されます。コンテナは、Dockerイメージから作成されます。
イメージは、アプリケーションやサービスを実行するために必要なすべてのファイル、設定、依存関係を含む静的なスナップショットです。イメージは、Dockerfileと呼ばれるテキストファイルで定義され、Dockerイメージビルドコマンドを使用して構築されます。
コンテナは、仮想マシンとは異なり、ホストオペレーティングシステムのカーネルを直接利用します。これにより、コンテナは軽量で高速に起動し、リソースの効率的な利用が可能です。また、コンテナは隔離された環境を提供し、アプリケーションやサービスが他のコンテナやホストシステムと相互に干渉することなく実行されることが保証されます。
Dockerコンテナの利点
ポータビリティ、再現性、スケーラビリティです。コンテナは環境に依存せず、異なるプラットフォームや環境で一貫した動作を提供します。また、開発から本番環境まで同じコンテナイメージを使用することで、アプリケーションの再現性が向上します。さらに、コンテナは必要に応じてスケーリングすることができ、負荷に応じて迅速に増減させることができます。
Dockerコンテナは、開発、テスト、デプロイメントなどのさまざまなシナリオで広く使用されています。
コンテナには、ライブラリ、システムツール、コード、ランタイムなど、ソフトウェアの実行に必要なすべてのものが含まれています。
ライブラリとは、プログラムの部品をひとまとめにしたファイルのこと。システムツールとはアプリのこと、コードとはプログラムコードのこと、ランタイムとは、プログラムを動かすときに必要な部品のことです。
コンテナとは昔からある技術です。仮想対象が少ないので実行速度が速いです。Linux をベースとしています。
コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。カーネルとは、OS の基本機能の役割を担うソフトウェアを指します。 そのため、軽量で高速に起動、停止などができるのです。
6.Docker を AWS で運用する
開発者や管理者は、どのような規模の分散アプリケーションでも、高信頼性と低価格を実現した方法ですばやくビルド、出荷、実行できます。AWS とは、Amazonが提供するクラウドです。インターネット経由でデータベース、ストレージ、アプリなど様々なITサービスを利用できるサービスのことです。
従来、ハードウェアを導入する際に必要であった多額の初期投資やリソースの調達、メンテナンス、容量の仕様計画などがクラウドサービスを利用することで削減でき、人的リソースを費やす必要がなくなります。
Docker は AWS と協力して、デベロッパーが最新のアプリをクラウドに迅速に配信できるように支援します。これにより、デベロッパーが現在ローカルで使用しているワークフローを使って、Amazon ECS と AWS Fargate にアプリケーションをシームレスに展開するために、Docker Compose と Docker Desktop を活用できるようになります。
アプリを動作させる技術
コンテナは、実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる技術です。コンテナが利用するリソースは他のプロセスやコンテナから隔離されています。そのため、コンテナに構築されたアプリは独立したコンピュータでアプリが動作しているように見えます。
コンテナを用いることで、異なるサーバでも、同じ構成の環境を簡単に構築することができます。仮想マシンよりも軽量で高速に動作し、実行に必要なリソースも少なくて済みます。「コンテナ」とは内部に物を収納する容器ですが、この容器の規格が明確に定められています。規格が定まっていた方が扱いやすいからです。
Dockerにおける「コンテナ」も、アプリやサーバーを「コンテナ」という規格が定まった容器に収納することで、他の環境でも利用しやすくしているのです。Dockerは、輸送しやすい「コンテナ」を「仮想化」を利用した環境で動作させることができるアプリケーションということになります。
コンテナはサーバの中核となる部分を利用し、プロセスやユーザなどをサーバごとに隔離することで、あたかも別のマシンがOS上に動いているかのように動かすことが可能となります。OSを複数のサーバが共通して利用しているため、軽量で高速に起動・停止などができるのです。
- コンテナ型の超軽量サーバ仮想化
- コンテナ内は実行環境として独立
- コンテナはリソース消費量が少
Docker の場合は、物理マシンの上に OS (Linux)があって、その上にコンテナエンジン(Docker)があって、その上にコンテナ(アプリ等)があるわけです。
結果として複数の OS を1つのコンピュータで動かすこともできます。OS も一つのソフトですから、
アプリと思えばたしかに OS の上で OS が動くのもアリですね。
2.Mac の環境構築
Docker がないと環境構築が大変です。
1.人によって動いたり動かなかったりする
Docker は「OS・ライブラリ・アプリケーション」全部そろっているので、これを使えばアプリを動かせるのです。人によっても動いたり動かなかったりするわけです。
テスト環境も本番環境もそのままいれるだけで、OS、ライブラリ、アプリケーションを簡単に開発・デプロイ(展開)できます。今回は Mac での利用です。
「iTerm2」はコマンドでコンピュータを使うとき。
「VSCode」は人気のあるテキストエディタです。コードが楽にかけます。
「Git」はバージョン管理するとき。元に戻したり振り返るときのツールです。
「Docker」は今回の主役です。
「iTerm2」のインストールをします。Google から iTerm2 のページを開き、下の方に Download
のボタンをクリックします。それをドラッグしてアプリケーションへ入れておきます。開けたら使ってみます。
「ls」(リナックス)と入力するとターミナルの画面になります。
このコマンドを使って操作していきます。
2.つぎは「VSCode」のインストール
ブラウザでググって「code.visualstudio.com」の方です。
ダウンロードしたらそのアイコンをアプリケーションの中に入れていきます。開いていきます。最初、拡張機能を入れておきます。
日本語化しておきたいので「Japanese」と入力すると Language が表示されるので、右側の「インストール」を押してください。
今回ドッカーを使うので「Docker」と検索して右側の「インストール」ボタンを押してください。
つぎは「Git」のインストールをしていきます。ブラウザで「Git」と検索、クリックして、右側に「Download」をボタンを押して、「homebrew」が便利なのでこれを押します。「Install
Homebrew」の下をコピーして、これを先ほどのターミナルに張り付けて実行してください。
パソコンのパスワードを入れます。Homebrew をインストールしたら、Download for macOS の「brew install」をクリックします。
Git が入ったらちゃんと動くかどうか確認します。「git–version」とバージョンを入力すると、これで表示されればちゃんと git がインストールされています。
本題の「Docker」のインストールは、「www.docker.com」からです。Get Started から「Docker Desktop」のDownload から。ダウンロードしたらクリックして、Docker からドラグ・ドロップしてアプリケーションの中へ入れていきます。
またターミナルを開いて、「docker–version」と入力して出力すると、表示されたら起動していることになります。
これで環境構築は完了です。
3.Windows の環境構築
「Windows Terminal」「VSCode」「Git」「WSL 2」「Docker」になります。
「Windows Terminal」は コマンドを操作して実行します。
「VSCode」は Mac でやっています。
「Git」もやっています。
「WSL 2」はLinux を動かすツールです。Linux で Docker を動かすのです。
「Docker」はMac でやっています。
「Windows Terminal」からインストールしていきます。ググってみます。まず「システム必要条件」を見ます。Windows のバージョン情報が表示されています。「winver」と入力して OK を押すと、自分の Windows のバージョンが確認できます。18362.0 のバージョンより新しい必要があります。
古かったらWindows のアップデートを行ってください。
1.起動ボタンを押します。
Windows Terminal はタブをクリックすると、「Windows Power shell」が表示されます。
「ls」と入力して Enter を押すとディレクトリ(フォルダ)の一覧を表示してくれます。このようにコマンドでコンピュータを操作するのがターミナルの役割になります。
「VSCode」は Mac でやっています。アイコンを追加するのチェックをみんなつけておきます。
「Git」のインストールも Mac でやっています。Next を押していくと「Use Visual Studio Code」を選択していきます。Recommendes を選んどいてください。あとはNext で OK です。インストールが完了したら Git を選び Windows の「ここに入力して検索」から Git Bash がでてくるので、使えるかどうか見てみます。
「git–version」と入力するとバージョン情報が表示されます。
「WSL 2」を有効化して Windows 上に Linux 環境を構築していきます。
Docker をググったら検索して「www.docker.com」から一番下の「Developers」の「Docs」をクリックして公式ドキュメントになるのでダウンロード・インストールを押します。「Docker Desktop for Windows」をクリックします。Install Docker ~Home の方でやっていきます。
System 要件の Mixrosoft のドキュメントを開いていくと、検索窓に「ja-jp」にすると日本語になるので、「手順1として、Linux 用 Windows サブシステムを有効にする」。Windows Power Shellの方を開いておいて、まず管理者として実行していきます。
Start-Process powershell.exe – Verb runas と入力して Enter を押すと青い画面でPower shellが開きます。先ほどのコマンドをコピーして実行していきます。
続いて「手順3:仮想マシンの機能を有効にする」で「コピー」して実行します。張り付けて実行します。「再起動」をしてインストールを完了し、WSL 2に更新します。
「手順4:Linux カーネル更新プログラム パッケージをダウンロードする」
「手順5-WSL2を既定のバージョンとして設定する」で「コピー」して実行する。普通のコマンドシェルの方に張り付けて実行しておきます。
「手順6」で「Ubuntu 20.04.LTS」は使いやすくて人気のあるOSです。「インストール開く」をクリックしてMicrosoft stor を開いてインストールボタンをクリックしていきます。「起動」ボタンを押します。username を記入します。適当でいいです。password も入力します。
これでインストール完了です。使えるようになりました。これでWSLを有効にして Windows 上でLinuxを動かすことができました。
「Docker のインストール」はまず「Docker Hub」というのを開きます。「Get Docker」をクリック、保存して、2つチェックを入れてOK、インストールが完了したらクローズボタンを押します。
Widows で「Docker」と検索して、ドッカーが起動しました。Windows ターミナルを開き、閉じてまた再起動します。Ubuntuを開きます。
ここからはMac もwindowsも同じです。
Dockerが人気を集める主な理由
パフォーマンスと効率性
Dockerは、仮想化技術を使用してアプリケーションをコンテナ化することで、高いパフォーマンスと効率性を提供します。コンテナは軽量でスピーディに起動し、システムリソースの効果的な利用を可能にします。
ポータビリティと互換性
Dockerコンテナは、アプリケーションとその依存関係を一つのパッケージにまとめるため、異なる環境やプラットフォーム間での移植性が高いです。開発環境と本番環境の一貫性を保ちつつ、簡単に展開やスケーリングができます。
インフラストラクチャの柔軟性
Dockerは、コンテナ単位でアプリケーションを分割し、マイクロサービスアーキテクチャやマルチコンテナ環境の構築に適しています。アプリケーションの部分的な更新やスケーリングが容易であり、柔軟なインフラストラクチャの構築が可能です。
簡易な管理とオーケストレーション
Dockerは、コンテナの作成、デプロイ、管理をシンプルかつ効率的に行うためのツールや機能を提供しています。また、Docker SwarmやKubernetesなどのオーケストレーションツールとの統合も容易であり、複数のコンテナを管理することができます。
大規模なコミュニティとエコシステム
Dockerは、大規模なコミュニティと豊富なエコシステムを持っています。公式ドキュメントやチュートリアル、サンプルコードなどのリソースが豊富であり、問題解決や知識共有が容易です。
これらの要素が組み合わさり、Dockerは開発者やシステム管理者にとって便利なツールとなり、幅広いアプリケーションの開発・デプロイ・管理に利用されています。
これなら Docker が流行るわけですね。
あとがき
Linux 環境に Docker をインストールすれば、各種アプリケーションを単独で、ユーザーからはあたかもサーバー上で動いているかのように見せる使いかたができます。
すでに Google では全部のソフトウェアに乗せていて、毎週30億個近いコンテナを起動している話もあります。未使用のコンピュータ資源をアクティブに入れ替えながら使うことでサーバの効率化ができます。少ないサーバー台数でたくさんの Web サービスを動かせるので、コストも削減できます。
Docker について、悩みや疑問がありましたらご自由にコメント欄に投稿してください。(コメント欄はこの記事の最下部です)。いただいたコメントはすべて拝見し、真剣に回答させていただきます。
コメント