どうも、ケニー(tsujikenzo)です。今日から新しいシリーズをお届けします。
VBAやGASをメインにプログラミング学習を行ってきた方は、あまり「環境」を意識することがなかったかもしれません。
それは、VBAはExcelやWordなどのアプリケーション内で動くため、環境構築が不要だったからです。GASも、Googleのクラウド上で動くため、環境構築が不要でした。どちらも「すぐに動かせる」環境が既に用意されていたのです。
しかし、Pythonを使うことが多くなったり、アプリを開発することが多くなると、状況が変わってきます。
- Pythonのバージョンが違うと動かない
- 必要なライブラリのバージョンが違うと動かない
- Macで動いたのに、Windowsで動かない
- 開発環境では動いたのに、本番環境では動かない
このような「環境の違い」による問題に直面することが増えてきます。
そこで役に立つのが、Docker(ドッカー)です。
Dockerを使えば、アプリとその実行環境を一緒にまとめることできるため、環境の違いを気にせずにアプリを動かせるようになります。たとえば、Macで作ったアプリを、WindowsやLinuxでも同じように動かせる。上司がWindows11で作ったアプリを、部下のWindows10で動かす。
もちろん、動かすだけでなく、開発するための環境構築もかんたんになり、効率が大幅に向上します。
この記事の目的
Dockerを理解するために、まず、以下の3つを理解することが重要です:
- アプリが動くために必要な環境:CPU、メモリ、OS、ランタイム、ライブラリ、設定ファイル、データベースなど
- 従来の問題:環境の違いで動かない
- Dockerの解決方法:環境ごとアプリを運ぶ
想定読者
- プログラミングを始めて間もない方
- VBAやGASなど「すぐ動かせる」環境に慣れている方
- PythonやWebアプリ開発で環境構築に悩んだことがある方
- Dockerについて「名前は聞いたことがあるけど使ったことがない」初学者
できるだけやさしく(具体例や図を交えながら)、Dockerの基礎を解説します。
アプリが動くために必要な環境
アプリが動くためには、ハードウェアとソフトウェア(アプリ)が必要です。
- ハードウェアとは、物理的な装置(CPUやメモリ、ディスクなど)を指します。
- ソフトウェア(アプリ)とは、ハードウェア上で実行されるプログラムやデータを指します。
たとえば、わたしたち世代がよく遊んだ、ファミコンとファミコンカセットが分かりやすいでしょう。
- ファミコン本体 = ハードウェア(CPU、メモリ)
- 物理的な装置で、ゲームを動かすための基盤
- ファミコンカセット = ソフトウェア(ゲームプログラム、データ)+ ハードウェア(ROMカートリッジ = ディスクに相当)
- カセットを差し込むと、ゲームが動く
- カセットには、ゲームプログラムだけでなく、必要なデータも含まれている
- カセットの中のROMカートリッジ(読み取り専用の記憶装置)が、パソコンでいうディスク(ファイルシステム)に相当する
パソコンも、同様です。
- パソコン本体 = ハードウェア(CPU、メモリ、ディスク)
- アプリやOS = ソフトウェア(アプリ)(プログラムやデータ)

もう少しだけ、ハードウェアとソフトウェアについて、詳しくみてみましょう。
ハードウェア(物理的な装置)
ハードウェアは、アプリを動かすための土台となる「実体」です。パソコンやサーバーなど、目に見える物理的な装置(CPU・メモリ・ディスクなど)を指します。
Dockerでは、このハードウェアの違い(例:Intel/AMD CPU、Apple Siliconなど)を意識せず、仮想的な同一環境でアプリを動かせるようにしてくれます。(詳細は次回以降のブログで)
CPU(中央処理装置):
- プログラムの命令を実行する
- コンピュータの「頭脳」
メモリ(主記憶装置):
- プログラムとデータを一時的に保存する場所
- CPUが直接アクセスできる高速な記憶装置
ディスク(ファイルシステム):
- プログラムファイルやデータファイルを永続的に保存する場所
- メモリと違い、電源を切ってもデータが残る
- 例:Windowsなら「Cドライブ」、Mac/Linuxなら「/」など
これらのハードウェアを管理するのが「基本ソフト(OS)」です。

ソフトウェア(プログラムやデータ)
「ソフトウェア(OSを含む)」とは、ハードウェア上で動作するプログラムや、そのプログラムが扱うデータのことを指します。
同じアプリ(ソフトウェア)であっても、実行するハードウェアや環境が異なるとうまく動かないことがあります。
この「環境の違いによる動作の不安定さ」こそが、Dockerが解決しようとしている大きな課題の一つです。(その詳細は次回以降のブログで紹介します)
OS(オペレーティングシステム):
- Windows、Mac、Linuxなど
- プログラムをメモリにロードし、CPUに実行させる
- アプリは、OSの上で動く
ランタイム環境:
- アプリを実行するための環境
- プログラミング言語ごとに異なる
- 例:Pythonランタイム(Python 3.11)、PHPランタイム(PHP 8.1)、Node.jsランタイム(Node.js 18)など
ライブラリ:
- アプリが使う便利な機能の集まり
- 例:Flask、requests、expressなど
- 依存関係:アプリが動くために必要なライブラリのリスト(「このライブラリのこのバージョンが必要」という情報)
設定ファイル:
- アプリの動作を制御するファイル
- データベースの接続情報、ポート番号など
- 例:WordPress →
wp-config.php、MySQL →my.cnf、nginx →nginx.conf
データベース(必要な場合):
- データを保存・管理するシステム
- WordPress、ECサイトなどで使用
- 例:MySQL、PostgreSQL、SQLite
アプリが正しく動作するためには、「ハードウェア」と「ソフトウェア」両方の環境が整っていることが重要です。どちらかが欠けたり違いがあると、思った通りにアプリが動かないことがあります。

従来の問題:環境の違い
ここまで、アプリが動くためには「ハードウェア」と「ソフトウェア」が必要だと説明してきました。
しかし、実際には環境が違うとアプリが動かないという問題があります。具体的には、以下の3つの問題があります。
- 問題1:OSの違い – 例:Macで動いたのに、Windowsで動かない
- 問題2:依存関係の違い – 例:開発者のPCでは動いたのに、他の人のPCでは動かない
- 問題3:設定ファイルの違い – 例:開発環境では動いたのに、本番環境では動かない
それぞれ、みてみましょう。
問題1:OSの違い
例:Macで開発 → Windowsで実行

問題2:依存関係の違い
例:同じOSでも動かない

問題3:設定ファイルの違い
例:環境ごとに設定が異なる

Dockerの解決方法:環境ごとアプリを運ぶ
ここで活躍するのがDockerです。Dockerを使えば、アプリケーションとその動作に必要な環境ごとひとまとめにして持ち運ぶことができます。
Dockerの考え方
Dockerは、アプリとその実行環境を一緒にまとめて管理します。
このようにまとめたものを、Dockerでは「コンテナ」と呼びます。

このように、「アプリ+実行環境」をひとつのコンテナにまとめることで、誰でも、どこでも、いつでもアプリを「作る(Build) 」「運ぶ(Ship)」「実行(Run)」できるようになります。

まとめ
以上で、「ノンプログラマーのためのDocker入門 基礎知識編」をお送りしました。
次回は、「Docker入門 Dockerコマンド編」をお届けします。お楽しみに。
参考文献
マンガでわかるDocker ① 〜概念・基本コマンド編〜 【ダウンロード版】 #技術書典


