Roa run dev

Dockerとは?Docker用語で概念理解しよう!【入門】

●目次

    Dockerは、開発、デプロイ、実行を容易にするコンテナ技術です。

    Dockerとは?

    Docker(ドッカー)は、アプリケーションをコンテナと呼ばれる単位でパッケージ化し、移植性とスケーラビリティを向上させるためのオープンソースのプラットフォームです。開発者や運用者は、Dockerを利用すれば、アプリケーションとその依存関係を一つの軽量なコンテナにまとめ、どの環境でも一貫して動作させることができます。

    コンテナ型仮想化技術とは

    コンテナ型仮想化技術は、ホストOSのカーネルを共有しながら、各アプリケーションを独立したコンテナ内で実行する技術です。

    従来の仮想マシン(VM)と比較して、コンテナは以下の特徴を持ちます:

    • 高い移植性
      コンテナイメージを使って、異なる環境間で容易にアプリケーションを移動・展開できる。
    • 軽量性
      コンテナはホストOSのカーネルを共有するため、
      VMのようにゲストOS全体を含む必要がなく、リソース消費が少ない。
    • 高速起動
      コンテナは起動が非常に速く、数秒で立ち上げることが可能。

    Dockerコンテナ(Container

    Dockerのコンテナは、仮想環境の一種ですが、仮想マシン(VM)とは異なり、ホストOSのカーネルを共有します。コンテナはアプリケーションとその必要な依存関係のみを含んでおり、効率的で軽量です。

    • コンテナはアプリケーションを実行するための「箱」のようなもの。
    • 仮想マシンと比較すると、コンテナはオーバーヘッドが少なく、起動も高速。

    Dockerイメージ(Image

    コンテナを作成するための「設計図」がDockerイメージです。イメージはアプリケーションとその依存関係を含む静的なファイルシステムです。イメージから複数のコンテナを作成できます。

    • イメージは不変であり、バージョン管理が可能。
    • イメージはDocker Hubなどのリポジトリから取得したり、自分で作成したりします。

    Dockerfile

    Dockerイメージを作成するための設定ファイルです。

    Dockerfileには、イメージを構築するためのコマンド
    (ベースイメージ、アプリケーションのインストール、環境設定など)が記述されています。

    • Dockerfile を使ってカスタムイメージを作成。
    • コマンドを逐次実行し、イメージのレイヤーとして構築。

    Docker Hub

    Dockerイメージのオンラインリポジトリです。
    Dockerユーザーは、公式やカスタムのイメージをDocker Hubからダウンロードしたり、
    独自のイメージをプッシュして共有することができます。

    • Docker Hubは、GitHubのように公開・共有できる場所。
    • 公式イメージ(例:Ubuntu、MySQLなど)は信頼性のあるベースイメージとして利用できます。

    Dockerエンジン(Docker Engine

    Dockerの中核部分で、コンテナの作成、管理、実行を行うソフトウェアです。

    Dockerエンジンは、クライアントとデーモンの2つの部分で構成されています。

    Dockerデーモン

    バックグラウンドで実行され、コンテナの作成、実行、停止などを管理。

    Dockerクライアント

    コマンドラインからDockerデーモンに指示を送るインターフェース。

    ボリューム(Volume)

    コンテナ内で生成されるデータを永続化するための機能です。コンテナは一時的なものなので、データの永続化にはボリュームが必要です。ボリュームを使用することで、コンテナを停止してもデータが保持されます。

    ネットワーク(Network):

    Dockerコンテナ同士、あるいはコンテナと外部との通信を可能にする仕組みです。
    Dockerにはさまざまなネットワークモードがあり、
    コンテナを同じネットワーク内で通信させたり、外部に公開したりできます。

    • Bridgeネットワーク:デフォルトでコンテナ間の通信に使われる仮想ネットワーク。
    • Hostネットワーク:ホストのネットワークとコンテナを直接接続するモード。
    • Overlayネットワーク:複数のホストにまたがるネットワークを作成。

    Dockerのワークフロー

    イメージの取得または作成

    Docker Hubからイメージをダウンロードするか、Dockerfileを使って独自のイメージを作成します。

       docker pull nginx   # Docker Hubからnginxイメージを取得

    コンテナの作成と実行

    ダウンロードしたイメージを元にコンテナを作成し、実行します。

       docker run -d -p 8080:80 nginx   # nginxコンテナをバックグラウンドで実行し、ポート8080を公開

    コンテナの管理

    実行中のコンテナを確認し、必要に応じて停止や削除ができます。

       docker container ls               # 実行中のコンテナを一覧表示
       docker container stop <container- > # コンテナを停止
       docker container rm <container- >   # コンテナを削除

    コンテナの永続化

    コンテナのデータを永続化するためにボリュームを作成し、コンテナにマウントします。

       docker run -d -v /mydata:/data nginx  # ホストの/mydataディレクトリをコンテナ内の/dataにマウント

    イメージの共有

    作成したイメージをDocker Hubにプッシュして、他のユーザーと共有することができます。

       docker push myrepository/myimage:tag  # Docker Hubにイメージをプッシュ

    Dockerのメリット

    • 軽量で高速:
      仮想マシンよりも起動が速く、システムリソースの消費も少ない。
    • 一貫性のある環境:
      開発、テスト、本番の環境で同じイメージを使用できるため、一貫した動作を保証。
    • 依存関係の管理が簡単:
      アプリケーションとその依存ライブラリを1つのコンテナ内にパッケージ化でき、
      依存関係の問題を解消。
    • 移植性:
      Dockerイメージを使うことで、
      異なるOSやハードウェア環境で同じようにアプリケーションを実行できる。

    まとめ

    Dockerは、アプリケーションとその依存関係をコンテナとしてパッケージ化し、どこでも同じ環境で実行できるツールです。コンテナは仮想マシンに比べて軽量で、効率的にリソースを利用できる点が特徴です。Dockerを使うことで、環境の違いによる問題を解消し、一貫性のある開発・運用を行うことができます。