Logo Image

Blog Article

Dockerとは何か?環境構築や基本操作

00

Dockerとは何か?

Dockerは、コンテナ仮想化プラットフォームであり、アプリケーションやその依存関係、実行環境をコンテナと呼ばれる軽量な単位でパッケージ化し、効率的にデプロイ、実行、管理するためのツールセットです。例えば、Windows(ホストOS)の中にUboutu(ゲストOS)のサーバーを作成したり、Mac(ホストOS)の中にCentOS(ゲストOS)のサーバーを作成することが出来ます。

Dockerコンテナ」は、実行時にホストOSのカーネルを共有するため、仮想マシンよりもリソースの効率が高く、起動が速い特徴があります。

コンテナ型」とは、ホストOSを動かしてカーネルを利用してあたかもゲストOSが上がるように仮想環境を作り上げることです。

以下は、Dockerの主な特徴と概念です。

コンテナ

Dockerは、アプリケーションやその依存関係、ランタイム、システムツールを含む、独立した実行単位としてコンテナを使用します。これにより、異なる環境やデプロイ先での互換性の問題を軽減し、アプリケーションのポータビリティを向上させます。

イメージ

DockerコンテナはDockerイメージから作成されます。イメージは、アプリケーションやサービスが実行されるために必要なすべての情報を含む静的なテンプレートです。イメージは再利用可能で、Dockerレジストリと呼ばれるリモートリポジトリで共有できます。

Dockerファイル

Dockerイメージをビルドするための指示を含むテキストファイルです。Dockerファイルには、ベースイメージ、依存関係のインストール、設定、実行コマンドなどが記述されます。

Docker Hub

Dockerイメージの公開・共有プラットフォームであり、Dockerコミュニティによってメンテナンスされています。一般的なイメージはDocker Hubから取得できます。

コンテナオーケストレーション

複数のコンテナを管理、配置、スケーリングするためのツール。KubernetesやDocker Composeなどがあります。

Dockerは、開発環境の構築、アプリケーションのデプロイ、スケーリング、およびインフラストラクチャの管理を容易にすることで、開発者や運用チームに多くの利益をもたらしています。

Docker利用のメリット

Dockerの利点は多岐にわたりますが、以下はその中でも特に重要ないくつかのメリットです。

ポータビリティ

Dockerコンテナはアプリケーションとその依存関係をカプセル化するため、どんな環境でも一貫して動作します。開発環境から本番環境まで、異なる環境間でのアプリケーションの移動が容易です。

効率的なリソース利用

Dockerは仮想マシンよりも軽量で、ホストOSのカーネルを共有するため、リソースの利用が効率的です。これにより、物理的なハードウェアや仮想マシンよりも多くのコンテナを同時に実行できます。

素早い起動と停止

コンテナは仮想マシンよりも速く起動し、停止できます。これにより、開発者や運用者はアプリケーションのデバッグやスケーリングなどの作業を迅速に行うことができます。

簡単なスケーリング (自動でクラウド上にサーバー構築が出来る)

Dockerコンテナは複製可能で、クラウド上でのスケーリングが容易です。新しいコンテナの追加や古いコンテナのスケールダウンが比較的簡単に行えます。AWSやGCPなどのクラウド上でもDockerを使うことが出来ます。(Dockerとkubernetesというコンテナ管理システムを使うと更に便利です。)

クラウド上でサーバーを構築する時はOS選択・ディスク容量の選択などをWebコンソールからコマンド入力で手動で設定することが出来ますが、Dockerファイルから作った「コンテナイメージ」を使うことで、自動でサーバー構築することが出来ます。そのため、同じコンテナイメージのインスタンスを複数立ててクラスターを作ったり出来ます。(作業の自動化・効率化が出来る)

コンテナイメージ」とは、Dockerファイルを元にして作るとこが出来るコンテナを立てるのに必要なコマンド・メタデータを含んだDocker環境で実行可能なパッケージのことです。

簡便な環境構築

Dockerファイルを使用することで、アプリケーションのビルドや環境構築が自動化され、環境差異による問題を最小限に抑えられます。

Dockerファイルの中にOSの指定・ミドルウェアのインストール・環境設定が全てコード化されている為、再利用・バージョン管理・配布が容易です。Dockerファイルを見れば、どんな環境が構築できるかが分かる他、作り出す環境の一部を変更したい場合、そのファイルの一部だけを編集すれば変更が可能です。また、テキストファイルなのでGitでバージョン管理が可能で、軽量なので、他の人に配布することも可能です。

コンテナオーケストレーションのサポート

DockerはKubernetesやDocker Composeなどのオーケストレーションツールと統合されており、複数のコンテナの管理やデプロイが容易になります。

Docker Hubで一般公開されているコンテナイメージを誰でも利用可能

Dockerファイルを1から自分で作成しなくても、Docker Hubというプラットフォームに一般公開されているイメージを使うことで、自分が使いたい環境やツールを手軽に入手することが出来ます。

これらのメリットにより、Dockerは開発者や運用者にとってアプリケーションの構築、デプロイ、管理を効率的かつ柔軟に行えるようにします。

Dockerのコンテナとイメージの違い

Dockerのコンテナ (Container)とイメージ (Image)は、Dockerの基本的な概念であり、それぞれ異なる役割を果たします。

Dockerイメージ (Image)

イメージは、コンテナの実行に必要なすべてのファイルと設定を含む静的なテンプレートです。コンテナの実行に必要なファイルシステム、ライブラリ、ツール、アプリケーションなどのコードと設定をまとめたもので、ひとつの静的な状態を表します。イメージはベースイメージ (別のイメージから派生したもの) やその上での変更レイヤを含み、これによってイメージの軽量な分散が可能になります。

Docker Hubなどのレジストリにイメージを保存し、他のユーザーが利用できるようにすることができます。

Dockerコンテナ (Container)

コンテナは、Dockerイメージを元に起動された実行可能なプロセスの状態です。イメージから作成されたコンテナは、プロセスが実行されている状態を表し、アプリケーションの実行環境です。

コンテナはイメージを基に作成され、イメージ内の静的なファイルや設定に加え、実行中のプロセスやネットワーク、ストレージなどの動的な要素が追加されます。コンテナは独立して動作し、ホストマシン上の他のコンテナと分離されています。

簡単に言えば、イメージはアプリケーションやサービスの静的な定義を表し、コンテナはそのイメージから生成されて動作する実体です。コンテナはイメージを基にして作られ、イメージの変更やデータの永続性がコンテナに影響します。 Dockerはこれらの概念を利用してアプリケーションのデプロイや管理を簡素化し、環境の再現性と柔軟性を提供します。

Dockerの基本操作

以下はデータベースをDockerコンテナとして立てるケースの例です。

  1. Docker Hubに一般公開されているコンテナイメージを取得(目的に応じたコンテナイメージを使う)

  2. Docker HubでMySQLと検索

  3. ターミナルでpullコマンドを実行し、コンテナイメージをローカルにダウンロードする

    Docker pullコマンドはどのディレクトリで実行しても問題ありません。Gitコマンドのように、今いるディレクトリの下にファイルやフォルダが作成されることはありません。docker runというコマンドは、ローカルにコンテナイメージが無い場合にDocker Hub上から自動でイメージを探してくれます。

  4. ローカルのコンテナイメージの情報が表示するコマンド実行
    //ローカルのコンテナイメージの情報表示するコマンド
    docker images
  5. docker runコマンドでコンテナを起動させる(Docker Hubに記載されている)
    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

    自分で設定を変更する

    ⚪ —name オプション: コンテナの識別子を自分で分かりやすい名前に変更

    ⚪ -eオプション: 環境変数の設定 (MySQLのルートユーザーのパスワードを環境変数に何か設定するという意味、ローカルの環境変数ではなく、コンテナ側の環境変数を設定している事に注意)

    ⚪ -dオプション (デタッチドモード): バックグラウンドでコンテナが実行される

    ⚪ mysql:tag

    ・使用するコンテナイメージの指定、「:tag」の後に必要なMySQLのバージョンを指定する

    ・バージョンについてはDocker Hubの「Tags」を開くとバージョンを調べることが出来る

    ⚪ -pオプション:

    ・ローカルPCの特定のポート通信をコンテナ側の特定のポートへ転送する指定 (ポートフォワディング)

    ・「ローカルPCのポート : コンテナ側のポート」で指定する

    ・ローカルは自分で指定 : MySQLのポート番号は3306

    変更後

    docker run --name kakuta0915-mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=kakuta0915 -d mysql

  6. 実行後、コンテナIDが表示される

  7. 起動しているコンテナの情報を表示する

    コンテナイメージはあくまでコンテナを作成する元になっているものであるため、同じイメージから複数のコンテナを作成可能

    //コンテナの情報を表示するコマンド
    docker ps

  8. コンテナの中に入る
    //コンテナの中に入るコマンド
    docker exec -it kakuta0915-mysql bash

    ⚪-itオプション: コンテナ側でのコマンド操作を今使っているコンソールから操作できる

  9. MySQLが操作できるか確認する
    bash-4.4# mysql -u root -p

  10. 操作をやめたい時 Ctrl + Q + Pと入力するとローカルに戻ってくる