【初心者用】Docker(ドッカー)とは?

公開日: 2023/3/22

Dockerは今や当たり前に使われているプラットフォームですが、実務で使用することになったため、今更ながら自分なりに調べてまとめてみました。

1. Docker(ドッカー)とは?

Dockerとは、コンテナを用いた仮想環境を作成・配布・実行するためのプラットフォームです。

アプリケーションを開発・デプロイするためのプラットフォームとして、AdobeやNetfixなどといった大手企業をはじめとする、様々な企業で使用されています。

Linuxをはじめ、WindowsやMacといった私たちが使用しているコンピュータをホストマシンとし、その上にコンテナという仮想環境を構築します。

この後で説明しますが、このコンテナは起動が早く、直接修正するというよりは、Dockerイメージを作成してコンテナを起動しなおす、といったように置き換えるといった方法でもストレスなく運用することができます。

2. コンテナとは?

Dockerとは、コンテナを用いた仮想環境を作成・配布・実行するためのプラットフォームです。

アプリケーションを開発・デプロイするためのプラットフォームとして、AdobeやNetfixなどといった大手企業をはじめとする、様々な企業で使用されています。

Linuxをはじめ、WindowsやMacといった私たちが使用しているコンピュータをホストマシンとし、その上にコンテナという仮想環境を構築します。

この後で説明しますが、このコンテナは起動が早く、直接修正するというよりは、Dockerイメージを作成してコンテナを起動しなおす、といったように置き換えるといった方法でもストレスなく運用することができます。

3. コンテナとは?

上記の説明でも出てきましたが、そもそもコンテナとはどんなものなのでしょうか。

コンテナとは、アプリケーションとそれを実行する実行環境を1つにまとめたものです。

これまでは、ホストOSの上にゲストOSを構築する形式が一般的でしたが、DockerはホストOSの上にゲストOSがなくても、Dockerエンジンというものを通して仮想環境を作ることができます。



ゲストOSを使用する仮想マシンだと、OSからの構築が必要になりますが、Dockerのようにコンテナ形式であれば、一つのOSで構築が可能なため、設定などの作業コストはかからない他、無駄なCPUやメモリを消費せずに済みます。

つまり、一つの土台(OS)があれば複数のアプリケーションを実行することができます。

WindowsやMacをホストOSとしてDockerを使用するとき、ホストOSとDockerエンジンの間でLinuxの仮想マシンが動いているそうです。



4. コンテナのメリット

コンテナ形式だと、どのようなメリットがあるのか見ていきましょう。

4-1. 起動時間が短縮できる

前述した通り、コンテナ形式ではゲストOSがないため、その分早くアプリケーションを起動することができます。

ゲストOSが必要な場合、ホストOS起動→ゲストOS起動で時間もメモリも無駄に消費してしまいますが、コンテナはホストOS起動→コンテナ起動のため、素早く起動することができます。

4-2. 環境構築が簡単

開発したものをテスト環境に反映して確認したいとなった場合、一から同じ環境を作成するのは非常に手間がかかります。

後で説明しますが、Dockerではイメージの機能を使用すれば簡単に同一環境を作成することができます。

また作成した環境へ、コンテナをそのまま移動させることでリリースも簡単に行えます。

これは、ホストOSなどとコンテナは独立しており、コンテナ内にはアプリケーションを実行するファイルやライブラリしか入っていないためです。

5. コンテナのメリット

次にコンテナ形式だと、どのようなデメリットがあるのか見ていきましょう。

5-1. OSの自由度が制限される

メリットとしてコンテナの移動が容易とありましたが、移動先のホストOSと異なる場合上手く動作することができません。

例えば、ホストOS「Linux」のコンテナを、ホストOS「Unix」では起動させることはできないのです。

5-2. 2.学習コスト

便利なコンテナですが、コマンドで操作するため、そのコマンド操作や手順などを覚える時間がかかっていまいます。

6. イメージとは?

コンテナは1つのファイルにすることができます。これをDockerイメージといいます。

簡単に説明すると、コンテナを作るための設計図です。

イメージにすることで、コンテナ自体のバックアップや移動が容易になります。

イメージはレイヤー構造になっており、イメージ自体を直接編集することはできません。

なので、以下の画像のようにイメージ化したものをコンテナ化したとき、その時生成されたコンテナレイヤーに初めて編集することができます。


このイメージを保管している場所を、Dockerレポジトリといいます。

Dockerリポジトリ1つにまとめておくことで、自分のサーバーにダウンロードして簡単に実行することができます。

ちなみに「Docker Hub」という共有のレポジトリがあります。ここで他の人が作成したイメージを使用することも可能です。


7. Dockerの実行方法

ここでは基本的な一部のコマンドを紹介していきます。

7-1. 1.イメージ操作

・docker pull             ・・・ リポジトリ(Docker Hubなど)からイメージを取得
・docker build           ・・・ Dockerfileからイメージを作成
・docker rmi                ・・・ イメージ削除
・docker images         ・・・ イメージの一覧表示
・docker push             ・・・ イメージをリポジトリ(Docker Hubなど)にアップロード

7-2. 2.コンテナ操作

・docker create        ・・・ 新しいコンテナの作成
・docker run             ・・・ 新しいコンテナの作成・起動
・docker start              ・・・ 作成済のコンテナを起動
・docker stop              ・・・ 作成済のコンテナを停止
・docker rm              ・・・ 作成済のコンテナの削除
・docker container ls  ・・・ コンテナ一覧表示
・docker commit         ・・・ コンテナをイメージ化

上記のコマンドを使用して、どのような流れでコンテナを起動していくのかを確認していきましょう。

7-3. 3.コマンド実行の流れ(例)

①docker pull イメージ名

 Docker Hubなどからコンテナのもとになるイメージを取得します。

②docker run イメージ名

 取得したイメージをもとにコンテナを起動します。

③docker stop コンテナ名

 コンテナを停止します。

④docker commit コンテナ名

 コンテナをイメージ化します。

④docker push Docker Hub ID/イメージ名 : タグ名

 イメージをDocker Hubにアップロードします。

8. まとめ

簡単なDockerについての説明と、基本的なコマンドをご紹介しました。

Dockerは今では広く普及し、利用するのは当たり前のような雰囲気を私自身感じていました。

今回自分で調べてみて、こんなにも便利なものがあったのなら早く知っておけばよかったと少し後悔しました・・・。

バージョン管理はgit管理しか経験がありませんでしたが、コマンドの流れを見ているとgitと同じような流れのようで、Dockerって難しいのかなと思っていた気持ちが少し解消されました。これからは積極的に使って勉強していきたいと思います。

おそらくこれからもDockerは使用され続け、より普及していくと思うので、私と同じくDockerを知らなかった人に少しでも参考になれば幸いです。