もう逃げない。基礎から学ぶDocker入門 / Dockerの概要（1/9）

## はじめに

今まで、全然理解できていなくて逃げてたDockerに関して、しっかり理解していこうと思います。

https://www.docker.com/

コレまで、便利なんだろうなと思いながらも、逃げてました。

なので、開発環境では使いこなせるスキルにまでは理解したいと思います。

あと、暗記してたDockerコマンドを１つ１つ理解していきます。

以下のような順番で勉強していきます。

- [Dockerの概要（1/9）](https://qiita.com/ryosuketter/items/d7833182dced67713d27) :point_left_tone1: 今ここ
- [Dockerの基本操作（イメージの作成, コンテナの起動, 停止, 削除）（2/9）
](https://qiita.com/ryosuketter/items/c53352f1143366d8b9a9)
- [Dockerの基本操作（ログの出力, コンテナの中でプロセスを実行する方法, 使用していない Docker オブジェクトの削除）（3/9）](https://qiita.com/ryosuketter/items/5fd73b7311175a691dfe)
- [Dockerfileを使用したサーバー構築（座学編）（4/9）](https://qiita.com/ryosuketter/items/d9c3420be7da586225e8)
- [Dockerfileを使用したサーバー構築（実践編）（5/9）](https://qiita.com/ryosuketter/items/716a4c5e49795d494600)
- [Docker Composeの概要（座学編）（6/9）](https://qiita.com/ryosuketter/items/104a4eb38f8824eb6de9)
- [Docker Composeのよく使う基本操作（7/9）](https://qiita.com/ryosuketter/items/8bbd2c60392f443cfe23)
- [Docker Composeを使ってRailsの環境を構築する（8/9）](https://qiita.com/ryosuketter/items/91cd107794c1cbe358c6)
- [Docker上に構築したRailsをHeroku（本番環境）にデプロイ（公開）する（9/9）](https://qiita.com/ryosuketter/items/e3e68ce6ec572dc8905e)

## Dockerとは何か

- Dockerはコンテナ技術を利用して、アプリケーションの実行環境を構築したり、運用したりするためのプラットフォーム
- アプリケーションの実行に必要なものをまとめてDockerイメージとして管理できる
    - そうすることで、以下のメリットがあるらしい
        - 自分のローカルPCや、AWS上で構築されたステージング環境や本番環境でも同じように動作する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/ff0d8b8b-494f-6d40-b94d-630b7d6e868e.png)

参考

https://frontier.networld.co.jp/3182/

https://ja.wikipedia.org/wiki/Docker

冒頭に出てきた、コンテナ技術とDockerイメージは何か？

解説します。

## コンテナ技術とは

コンテナとは、ホストOS上に他のプロセスから隔離された論理的な区画（コンテナ）を作って、そこにアプリケーションを実行させるのに必要な環境（ライブラリやアプリケーションなど）を１つにまとめ、個別のサーバー（コンピュータ）のように動作する技術のことです。

https://www.weblio.jp/content/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%8A%80%E8%A1%93#:~:text=%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%8A%80%E8%A1%93%E3%81%A8%E3%81%AF%E3%80%81OS,%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E6%8A%80%E8%A1%93%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82

![IMG_BCA7974E5451-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/01083403-fd37-24e5-fbb8-65228e89db04.jpeg)

ホストOSのリソースを論理的に分離し、複数のコンテナで共有して使用しているそうです。

コンテナはオーバーヘッド（付加的な処理 / 負荷）が少ないらしく、軽量で高速に動作するのが特徴らしい。

コンテナ技術を使うと、OSやディレクトリ、IPアドレスなどのシステムリソースを、個々のアプリケーションがあたかも存在しているように見せることができます。

## Dockerイメージとは

Dockerでは、コンテナを作成するためのライブラリやアプリケーションの情報を１つにまとめて、それをDockerイメージとしてデータを持てます。

そのDockerイメージをもとにコンテナを作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/ff0d8b8b-494f-6d40-b94d-630b7d6e868e.png)

参考

https://frontier.networld.co.jp/3182/

## Webシステムの開発におけるDockerの役割

Webのシステム開発において、アプリケーションを本番環境で実行・運用させるためには、以下のようなシステムが必要になります

- アプリケーションの実行モジュール（プログラム本体）
- ミドルウェアやライブラリ群
- OS・ネットワークなどのインフラに関する環境設定

Dockerでは、これらのインフラの環境をコンテナ単位で管理し、アプリケーションの実行に必要な全てのファイルやディレクトリなどをコンテナとして１つにまとめます。

このコンテナのもとになるDockerイメージを Docker Hub などのレジストリ（設定情報のデータベース）で共有できます。

https://hub.docker.com/

Dockerイメージは、Dockerがインストールされている環境であればどこでも動作させることができます。

これが、自分のローカルPCや、AWS上で構築されたステージング環境や本番環境でも同じように動作するしくみです。

これにより、異なる環境でも、同じDockerイメージを使用することで、環境ごとに挙動が異なるリスクを減らすことができます。

以上です。

## アウトプット100本ノック実施中

https://qiita.com/ryosuketter/items/713474dbd009870e4103