Udemy 2. Docker入門 #02
2020年06月24日に更新

分かるDocker解説。仮想環境・コンテナ・Dockerイメージ・Dockerfileとは何か?

この記事でお話しすること

この記事では、DockerでのRails開発を始めるに当たって、知っておきべき基礎知識を解説していきます。

具体的には以下の4つについてお話しします。

  • 仮想環境
  • コンテナ
  • Dockerイメージ
  • Dockerfile

なお、「分かりやすく伝える」ことを最優先にしているため、突っ込んだ知識は除外し、できるだけ簡潔に説明しています。

Dockerとは何か?

Dockerとは、パソコン上に仮想環境を作れるツールです。

仮想環境とは

  • 物理的なハードウェアを持たず
  • 仮想的にOSを動かし、
  • アプリケーションを実行させる環境

を言います。

Dockerを使った仮想環境の具体例

docker

通常の開発環境(画像: 左)

通常、Mac上に作られたRailsアプリケーションは、Mac上のRubyに依存します。

MacのRubyをバージョンアップした場合、依存したRailsアプリは動かなくなります。

動かすためにはRailsのGemfileを書き換え、対応するRubyのバージョンを合わせる必要があります。

Dockerを使った開発環境(画像: 右)

Dockerを使えば、Macとは別のOS上に新たにRubyをインストールし、そのRubyに対応したRailsアプリを作ることができます。

もちろん仮想環境でRubyをインストールしているため、Mac上のRuby本体やRailsアプリには何ら影響ありません。

このDocker上に作られた仮想環境をコンテナと呼びます。

コンテナとは

Docker上に作られた仮想環境のこと。

Dockerの優れた移植性

Dockerの最大の特徴は、その移植性にあります。

docker2

Dockerが動く環境さえあれば、他のパソコン上でも同じ環境のコンテナを動かすことができます。

このコンテナのもととなるデータをDockerイメージと呼びます。

このイメージを受け渡すことで同じ環境(コンテナ)を実現します。

Dockerイメージとは

仮想環境(コンテナ)のもととなるデータをひとまとめにしたもの。

DockerイメージはDockerfileをもとに作られる

Dockerイメージは、Dockerfileの情報をもとに作られます。

docker3

Dockerfileには「コンテナがどのような構成になるのか」の情報をコードで記述します。

そして$docker buildコマンドを実行することでDockerイメージが作成され、そのイメージをもとにコンテナが起動します。

Dockerfileのサンプル
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

今後、Dockerfileを作成することがあれば「あ、これはDockerイメージの構成を書き込んでいるんだな」とお考えください。

Dockerfileとは

Dockerイメージの構成情報を記述するファイルのこと。

まとめ

最後にここまで学んだことを整理しておきましょう。

  • Dockerとは、パソコン上に仮想環境を作れるツール
  • 仮想環境とは、物理的なハードウェアを持たず、仮想的にOSを動かす環境
  • コンテナとは、Docker上に作られた仮想環境のこと
  • Dockerイメージとは、コンテナのもととなるデータをひとまとめにしたもの
  • Dockerfileとは、Dockerイメージの構成情報を記述するファイル

まずはこれだけ知っておけば、Dockerの理解がスムーズになります。

あとは手を動かして覚えましょう。

おしまい。

さて、次回は?

次回はDockerでのWebアプリケーション開発に必須な「Docker Compose」について説明していきます。

それでは。

あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる...。そんな方に向けた単発・短期間メンターサービスを行っています。下のサービスへお進みください。
独学プログラマのサービス
次の記事はこちら
1. このカテゴリーの歩き方 #01
【お知らせ】UdemyでRails × Nuxt.jsの動画を公開することになりました
1. このカテゴリーの歩き方 #02
【随時更新】このカテゴリーで作るアプリケーションの仕様書
1. このカテゴリーの歩き方 #03
【随時更新】このカテゴリーの歩き方
1. このカテゴリーの歩き方 #04
(Docker+Rails6+Nuxt.js+PostgreSQL)=>Heroku 環境構築~デプロイまでの手順書
2. Docker入門 #01
Docker for Macをインストールする手順
2. Docker入門 #02
分かるDocker解説。仮想環境・コンテナ・Dockerイメージ・Dockerfileとは何か?
2. Docker入門 #03
分かるDocker解説。DockerComposeとは何か?
3. Dockerを使ったRails+Nuxt.js環境構築 #01
【Docker+Rails6+Nuxt.js】今回作成するアプリの開発環境の全体像を知ろう
3. Dockerを使ったRails+Nuxt.js環境構築 #02
【MacOS】Homebrew経由でGitをインストールする方法
3. Dockerを使ったRails+Nuxt.js環境構築 #03
Rails6を動かすAlpineベースのDockerfileを作成する(AlpineLinuxとは何か)
3. Dockerを使ったRails+Nuxt.js環境構築 #04
Nuxt.jsを動かすAlpineベースのDockerfileを作成する(C.UTF-8とは何か)
3. Dockerを使ったRails+Nuxt.js環境構築 #05
.envファイルを使ったdocker-compose.ymlの環境変数設計
3. Dockerを使ったRails+Nuxt.js環境構築 #06
Rails6・Nuxt.js・PostgreSQLを動かすdocker-compose.ymlファイルを作成する
3. Dockerを使ったRails+Nuxt.js環境構築 #07
docker-compose.ymlを使ってRails6を構築する(PostgreSQLパスワード変更方法)
3. Dockerを使ったRails+Nuxt.js環境構築 #08
docker-compose.ymlを使ってNuxt.jsを構築する
4. 複数プロジェクトのGit管理 #01
複数プロジェクトで行うGit管理の全体像を理解しよう(Gitサブモジュール解説)
4. 複数プロジェクトのGit管理 #02
【Git】既存の子ディレクトリをサブモジュール管理に変更する手順
4. 複数プロジェクトのGit管理 #03
【GitHub】秘密鍵の生成・公開鍵を追加・SSH接続するまでを画像で分かりやすく
4. 複数プロジェクトのGit管理 #04
【GitHub】リモートリポジトリの追加・サブモジュールのリンク設定を行う
5. RailsAPI×Nuxt.js初めてのAPI通信 #01
【Rails6】"Hello" jsonを返すコントローラを作成する
5. RailsAPI×Nuxt.js初めてのAPI通信 #02
【Nxut.js】axiosの初期設定を行う(baseURL・browserBaseURLを解説)
5. RailsAPI×Nuxt.js初めてのAPI通信 #03
【Rails6】Gem rack-corsを導入してCORS設定を行う(オリジン・CORSとは何か)
6. Heroku.ymlを使ったDockerデプロイ #01
最初の一歩。Herokuへ新規会員登録を行いHerokuCLIをインストールする
6. Heroku.ymlを使ったDockerデプロイ #02
heroku.yml解説編。Docker環境のRails6をHerokuにデプロイする(1/2)
6. Heroku.ymlを使ったDockerデプロイ #03
HerokuCLI-manifestのデプロイ解説編。Docker環境のRails6をHerokuにデプロイする(2/2)
6. Heroku.ymlを使ったDockerデプロイ #04
Dockerfile解説編。Docker環境のNuxt.jsをHerokuにデプロイする(1/2)
6. Heroku.ymlを使ったDockerデプロイ #05
デプロイ完結編。Docker環境のNuxt.jsをHerokuにデプロイする(2/2)
7. モデル開発事前準備 #01
【Rails6】application.rbの初期設定(タイムゾーン・I18n・Zeitwerk)
新着
SPA開発
ブログ構築
小ネタ集