KAKUTA TECH BLOG

Blog Article

Docker 入門 ~ コンテナ・イメージの仕組みからメリットまで徹底解説 ~

Dockerとは何か?

Docker は、アプリケーションを動かすために必要な環境をまるごと 1 つの箱に詰めて、どんなパソコンやサーバーでも同じように動かせるようにする仕組みです。この箱のことを、コンテナと呼びます。よく「自分のパソコンでは動いたのに、本番のサーバーでは動かない」という問題が起きますが、Docker はこれを解決するために生まれました。

この仕組みを支えているのが、コンテナ型仮想化という考え方です。1 台のパソコン(ホストOS)の中に、区切られた実行スペースをいくつも作り、それぞれが別々のパソコンのように振る舞う技術のことです。似た言葉に仮想マシンがありますが、仮想マシンが OS をまるごと 1 台分作るのに対し、コンテナはホストOS の中核部分(カーネル)を共有して動くため、容量が少なく、起動も速いという特徴があります。

例えば、Windows のパソコンの中に Ubuntu 向けのコンテナを作ったり、Mac の中に CentOS 向けのコンテナを作ったりできます。ただしこれは、OS がまるごと 1 台分立ち上がっているわけではなく、その OS の実行環境を軽い形で再現しているだけです。

ここまでの内容を踏まえて、次は Docker の主な特徴と、覚えておきたい基本の言葉についてまとめます。

コンテナ

コンテナとは、アプリケーション本体と、それを動かすために必要な部品(依存関係やランタイム、システムツールなど)をひとまとめにした、独立した実行の単位です。必要なものがすべてコンテナの中に揃っているため、開発環境と本番環境で動きが変わってしまうといった互換性の問題が起きにくくなり、どこにでも持ち運んで動かせるようになります。

イメージ

コンテナは、イメージと呼ばれる設計図のようなものから作られます。イメージには、アプリケーションを実行するために必要な情報がすべて詰まっており、何度でも同じ状態のコンテナを作り直すことができます。また、イメージはレジストリと呼ばれる保管場所にアップロードすることで、他の人と共有することもできます。

Docker ファイル

Docker ファイルは、イメージをどうやって組み立てるかを書いたテキストファイルです。どのイメージを土台にするか、どんな依存関係をインストールするか、どんな設定でアプリを起動するか、といった手順がここに記述されています。

Docker Hub

Docker Hub は、世界中の人が作ったイメージを公開したり、探してダウンロードしたりできる場所です。よく使われるソフトのイメージは、たいてい Docker Hub からそのまま取得できます。

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

コンテナの数が増えてくると、1 つずつ手作業で管理するのは大変になります。コンテナオーケストレーションは、複数のコンテナの起動や配置、台数の増減を自動でまとめて管理してくれる仕組みです。代表的なツールに Kubernetes や Docker Compose があります。

こうした仕組みによって、Docker は開発環境の構築からアプリケーションのデプロイ、スケーリング、インフラの管理まで、開発者や運用チームの作業を大きく楽にしてくれます。

Docker 利用のメリット

Docker には数多くの利点がありますが、その中でも特に重要なものを紹介します。

ポータビリティ

Docker コンテナは、アプリケーションとその依存関係をまとめて閉じ込めているため、どんな環境でも同じように動作します。そのため、開発環境で作ったものをそのまま本番環境に持っていく、といった環境間の移動がとても簡単になります。

効率的なリソース利用

Docker は仮想マシンに比べて軽量です。ホストOS のカーネルを共有する仕組みになっているため、必要なリソースが少なく済み、同じ性能のハードウェアでも、仮想マシンを使う場合よりずっと多くのコンテナを同時に動かすことができます。

素早い起動と停止

コンテナは仮想マシンよりも起動や停止が速く行えます。そのため、動作確認や修正を素早く繰り返したり、必要に応じてすぐに台数を増減させたりといった作業がしやすくなります。

簡単なスケーリング

Docker コンテナは複製がしやすく、クラウド上での台数調整にも向いています。 AWS や GCP といったクラウドサービス上でも Docker は利用でき、Kubernetes というコンテナ管理の仕組みと組み合わせることで、さらに扱いやすくなります。

通常、クラウド上でサーバーを 1 台作るときは、 OS の種類やディスクの容量などを Web の管理画面やコマンドで、その都度手動で設定する必要があります。しかし、あらかじめ Docker ファイルから作っておいたコンテナイメージを使えば、同じ設定のサーバーを自動で何台でも作ることができます。これにより、同じ環境のサーバーをまとめて並べて、負荷分散のための集団(クラスター)を作るといったことも簡単に行えます。

ここで出てきたコンテナイメージとは、 Docker ファイルをもとに作られる、コンテナを起動するために必要なコマンドや情報をひとまとめにしたパッケージのことです。

簡便な環境構築

Docker ファイルを使うと、アプリケーションを動かすための環境構築を自動化でき、環境ごとの細かな違いによるトラブルを防ぐことができます。

Docker ファイルの中には、使用する OS の指定やソフトのインストール、各種設定がすべてコードとして書かれています。そのため、ファイルを見るだけでどんな環境が出来上がるのかが分かりますし、変更したい部分があれば、そのファイルの該当箇所を直すだけで済みます。また、ただのテキストファイルなので Git で変更履歴を管理でき、容量も小さいため、他の人へ配布するのも簡単です。

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

Docker は Kubernetes や Docker Compose といった管理ツールと組み合わせて使うことができ、コンテナの数が増えても管理やデプロイをまとめて行いやすくなります。

Docker Hub で公開されているイメージを誰でも利用可能

Docker ファイルを自分でゼロから作らなくても、 Docker Hub に公開されているイメージを使えば、必要な環境やツールをすぐに手に入れることができます。

これらのメリットによって、 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と入力するとローカルに戻ってくる