このハンズオンでやることDocker の概要を学び、コンテナ操作を体験します
想定時間1h
前提知識・用語仮想化、CUI 操作

# Dockerを触ってみよう

# はじめに

Docker は、Docker, Incが開発しているコンテナ型の仮想環境プラットフォームです。 コンテナとは仮想マシンのように1台のコンピュータの上で、仮想的に複数のアプリケーションを動作させる技術・仕組みの1つです。

Docker(コンテナ仮想化プラットフォーム)を使用すると、アプリケーションやその依存関係をコンテナと呼ばれる独立した環境にパッケージ化することができます。 では、コンテナと仮想マシンは何が異なるのでしょう?

一般的に、仮想マシンと呼ばれるソフトウェアでは、ホストOS上で仮想マシン用のソフトウェア(VirtualBox等)を動かすことでホストOSとは異なるOSを起動します。 一方、コンテナによる仮想化は、ホストOS上にアプリケーション実行用の専用領域を作成し、その中で実行する仕組みとなっています。

# 本講義の目的

  • Dockerについて正しい基礎知識と理解を得る
  • DockerFile および dockerコマンドを用いてdocker containerを作成・操作できるようにする

# 本講義で扱わないこと

  • dockerコマンドのオプション・細かい操作に対する解説
  • コンテナイメージレイヤーの細かい解説

# 本講義の目標

  • dockerコマンドを利用してコンテナの取得・起動・停止ができるようになる
  • DockerFileの読み方・書き方を知り、自分で作成もしくは加筆修正するなど、自分の目的に沿ったコンテナを作成できるようになる

# "Docker" とは

はじめに で Docker = コンテナ型仮想環境プラットフォーム、として説明しましたが、本講義で扱う"Docker"は、コンテナ仮想プラットフォームを扱う上での技術的な概念やコマンド等を示します。

以下にDockerを扱う上で重要となる概念を記載します。

  • Docker コンテナ

    • Dockerは、アプリケーションとその依存関係をコンテナと呼ばれる軽量な仮想環境にパッケージ化します。コンテナは、ホストマシンとは独立して実行され、一貫した動作を提供します。コンテナはポータブルであり、異なる環境やプラットフォームで実行できます。
  • Docker イメージ

    • Dockerコンテナは、Dockerイメージから作成されます。イメージは、アプリケーションの実行に必要なすべての依存関係と設定を含むファイルシステムのスナップショットです。イメージは、Dockerfileと呼ばれるテキストファイルに定義され、ビルドコマンドを使用して作成されます。
  • コンテナオーケストレーション

    • Dockerは、コンテナのデプロイメントと管理を容易にするための機能を提供します。複数のコンテナを管理するためのツールとして、Docker ComposeKubernetes(*)などがあります。これらのツールを使用すると、複雑なマルチコンテナ環境を構築し、スケーリングやロードバランシングなどの機能を実現することができます。
  • イメージの共有

    • Docker HubやDocker Registryなどのオンラインリポジトリを使用することで、Dockerイメージを共有および配布することができます。これにより、他の開発者との協力や、既存のイメージを再利用することが容易になります。

本講では主に仮想環境プラットフォームである「Docker コンテナ」を中心に行いますが、一方で「Docker イメージ」についても学び、自身にとって扱いやすい仮想環境プラットフォームを扱えることを目的と致します。

コンテナオーケストレーション」については続く docker-compose の項で扱います。

# 講義の進め方

本講義では、予めDockerがインストールされていることを前提としています。 Dockerのインストールが完了していない方は、「ハンズオン事前準備」を済ませてください。

# Chapters

# 参考

# 仮想マシン vs コンテナ

仮想マシンとコンテナ、どちらが優れており、どちらを使うべきなのでしょう?

それは一概にどちらが優れているからそうすべき、といった類いの物ではありません。 コンテナは仮想マシンと比べて後発であるため、仮想マシンが抱えていた問題を解決しているのは確かですが、上位互換という事ではありません。 コンテナには仮想マシンには無いメリットもありますがデメリットもあります。 コンテナは仮想マシンと異なり、OS の中で別のOSを起動するという事が無いため、セットアップや起動時においてもOSに関わる処理を必要としない為、時間を大幅に短縮することが可能です。また、ハードウェアにアクセスする際もゲストOSを介することが無いため、オーバーヘッドが少なく高速な動作が期待できます。

しかし、その一方で仮想マシンと比べてホストOSとの独立性が少ないため、ホストOSとアーキテクチャが大きく異なるコンテナを共存させることはできません。

例)Linux 上で Windows コンテナを起動・実行する

# Docker のアーキテクチャ

Docker Image


CC BY-SA Licensed | Copyright (c) 2023, Internet Initiative Japan Inc.