🕛 2024.5.8 22:18

【初心者歓迎】Docker超入門! 概要と魅力を解説

  • Dockerってなんだろうな
  • いつもプロジェクトを別のPCで動かすとエラーが出て開発どころじゃなくなる
  • チームメンバーが使ってるOSがバラバラで毎回環境設定に苦労している
  • Dockerを使うことで、これらの問題が解決しますよ!

    実際にDockerを使っているエンジニアさんの感想です。

    https://www.itreview.jp/products/docker/reviews#review-135108

    プログラマー歴20年の管理人が、これらの悩みを解決できるようにDockerの概要と魅力を書きました!

    Dockerとは?Dockerの仕組みとは?

    Dockerは、アプリケーションをコンテナという箱に詰めて、どのOS上でも同じように動くようにするツールです。「自分のPCでは動くのに、他のPCでは動かない」という問題を解決します。

    コンテナはアプリケーションが動作するのに必要なコード、ライブラリ、設定ファイルなどを全て含んでいるので、どのコンピューター上でも同じ条件でアプリケーションを動かすことができます。

    開発者は異なる環境間での動作の違いに悩まされることなく、より一貫性のある開発とテストが可能になります。

    https://blog.bytebytego.com/i/135350048/how-does-docker-work

    例えば、レストランで料理を作るときに、必要な材料とレシピがセットになっている料理キット(Dockerイメージ)があったとします。この料理キットを使えば、いつでもどこでも誰でも同じ料理を簡単に作ることができます。

    • Dockerイメージ:必要な材料とレシピがセットになっている料理キットのようなものです。料理に必要な材料とレシピがすべて含まれています。
    • Dockerコンテナ:このキットを使って実際にできた料理です。同じキットから何度でも同じ料理を作ることができます。
    • Docker Daemon:キッチンのようなもので、料理(コンテナ)を作る場所です。
    • Dockerクライアント:料理人です。キッチン(Daemon)に何を作るか指示します。

    料理キット(イメージ)があれば、どのキッチン(どのOS上のDocker)でも全く同じ料理を簡単に再現できることです。「私のキッチンではうまくいくのに、あなたのキッチンではうまくいかない」という問題がなくなります。

    要は、Dockerは「料理キット」を使って、どこでもいつでも簡単に、誰でも確実に同じ料理を作れるようなツールです。

    Dockerまでの道のり

    https://blog.bytebytego.com/i/138718849/tracing-the-path-from-bare-metal-to-docker

    Dockerが登場する前までアプリ開発ではこのような課題がありました。

    1. 環境の一貫性がなかった
      • 従来、アプリケーションを開発する環境と実際に運用する環境が異なることが多く、この「それは私のマシンで動くけど、あなたのマシンでは動かない」という問題が発生していました。
    2. セットアップが複雑だった
      • 新しい開発者がプロジェクトに参加する際、開発環境をセットアップするのが非常に時間がかかり、複雑でした。
    3. リソース効率の問題があった
      • 仮想マシンを使用する従来の方法では、各アプリケーションが全てのOSを含むため、重く、リソースを大量に消費していました。

    Dockerのメリット

    環境の一貫性

    Dockerは軽量なコンテナを使用してアプリケーションをパッケージ化し、どの環境でも同じ条件でアプリケーションを動かすことを可能にしました。

    チームメンバーで同じ環境で開発や運用ができます。本番と同じ環境をステージングで簡単に作成できます。

    移動性(ポータビリティ)の向上

    ホスト環境を汚さず異なるOSやインフラで簡単に移動できます。

    開発やデプロイの迅速化

    Dockerコンテナは起動が速く、数秒で完了するため、開発プロセスが大幅にスピードアップします。

    Dockerは継続的インテグレーション(CI)や継続的デリバリー(CD)と非常に相性が良く、アプリケーションのビルド、テスト、デプロイメントを自動化しやすくします。

    継続的インテグレーション(CI)は、コード変更ごとにビルドとテストを自動で行います。継続的デリバリー(CD)は、ソフトウェアをいつでも本番環境に安全にデプロイできるようにします。

    リソースの効率化

    Dockerは従来の仮想マシンと比較して非常にリソース効率が良いです。少ないリソースで多くのアプリケーションを稼働させることができ、コストを削減できます。

    仮想マシン vs Docker

    https://www.geeksforgeeks.org/docker-or-virtual-machines-which-is-a-better-choice/
    特性仮想マシン(VM)Docker
    抽象化のレベルホストOS内で別のOSを作るホストOSを共有してコンテナ上でアプリを動かす
    起動速度起動には数分かかることが一般的数秒で起動
    リソース各VMが独立したOSを持ち、より多くのリソースを消費ホストOSのカーネルを共有するので、リソース消費が少ない
    隔離性OSレベルの隔離アプリケーションレベルの隔離
    移植性VMはハイパーバイザーの種類に依存するコンテナはOSから独立しており、どのDocker環境でも実行可能

    ハイパーバイザーは、仮想マシンを作成、実行、管理するためのプラットフォーム

    Docker 利用ケース

    Docker を使うことによってこういった利用ケースが生まれています。

    DevOpsの採用

    Dockerを使うことで、アプリケーションのビルドやデプロイが迅速に行えるため、CI/CD、開発中のコードを頻繁に統合することやアプリケーションをリリース可能な状態に保つことが容易になります。

    開発と運用の効率が向上し、より迅速に市場ニーズに反応することが可能になります。

    DevOpsは開発(Dev)と運用(Ops)を組み合わせた言葉で、ソフトウェア開発とその運用をスムーズに連携させる実践です。

    マイクロサービスアーキテクチャ

    マイクロサービスアーキテクチャは、大きなアプリケーションを小さなサービスに分割し、それぞれが独立して機能する設計方式です。

    Dockerはマイクロサービスを個別のコンテナとして開発・デプロイするのに適しています。

    各サービスを個別に更新・拡張できるため、アプリケーション全体の管理が柔軟で効率的になります。

    インフラストラクチャのコード化

    インフラストラクチャのコード化(Infrastructure as Code, IaC)は、サーバーやネットワークなどのインフラをコードを用いて管理する手法です。

    Dockerを使用すると、インフラストラクチャの設定をコードとして記述し、自動化できます。

    手動での設定ミスが減り、迅速かつ一貫した環境構築が可能になります。

    テストの改善

    Dockerは、異なる開発・テスト環境を素早く簡単にセットアップできます。

    どの環境でも一貫した条件でテストを行うことができ、開発のフレキシビリティが向上します。結果として、エラーの特定と修正が迅速に行えるようになります。

    復旧対策

    Dockerを用いると、アプリケーションとその依存関係を一つのコンテナに包含するため、バックアップや復旧が容易になります。

    災害時でも迅速にシステムを復旧させることが可能で、ビジネスの継続性が保たれます。

    Hands-On

    Dockerをインストールしてみましょう!Macで実践してみます。

    Docker Desktop for Macのダウンロード

    Docker公式ダウンロードページにアクセスし、「Docker Desktop for Mac」をダウンロードします。

    インストール

    ダウンロードした.dmgファイルを開いて、指示に従ってインストールします。DockerアプリをApplicationsフォルダにドラッグアンドドロップします。

    Dockerの起動

    ApplicationsフォルダからDockerを開きます。初回起動時には、Dockerアイコンがメニューバーに表示され、初期化プロセスが自動的に始まります。

    Dockerの動作確認

    ターミナルを開く

    LaunchpadやSpotlight検索を使用して、ターミナルを開きます。

    Hello World コンテナの実行

    以下のコマンドをターミナルに入力し、実行します。

    docker run hello-world

    このコマンドが成功すると、Dockerが正常に動作していることを示すメッセージが表示されます。

    まとめ

    • Dockerは、異なるOSでも同じアプリケーションを動かせるツール
    • コンテナ起動も高速で、軽量のためリソースを節約できる
    • DevOps、マイクロサービス、テスト/復旧で利用されている