Docker 本質

環境をコードで管理すること

📅 開催日時:2025年12月27日

🐳 Dockerの本質を理解して、環境構築の悩みから解放されよう

💡 XXX as Code を覚えていってね!これだけ!

Dockerを学ぶメリット

🧹
環境が汚れない
プロジェクトごとに独立した環境。
PCがぐちゃぐちゃにならない。
💼
現場の基礎知識
今やほぼ全ての開発現場でDocker使用。
知らないと話についていけない。
🐧
Linux力が自然につく
Dockerを使うだけで
Linuxとシェルコマンドが身につく。

エンジニアには必須。非エンジニアにはハードル高いが...

てか使えたら最強 💪

⏱️ 学習目安

20時間 新井のUdemy講座(10時間動画 + ハンズオンで止めながら)
30時間 Docker Composeでアプリを1つ作る
合計 50時間 である程度理解できる!

🐧 Linuxを触ったことない人は...

+20時間 新井のUdemy講座【第二弾】ゼロからはじめるAWSウェブ開発
- EC2上でLinuxを学習しウェブアプリを作るための知識を習得

(動画10時間 + ハンズオン10時間)

🎁

🎫 応援チケット(アーカイブ+Udemyクーポン付)特典

2025年12月26日に完成したUdemyのDockerコース ¥1,300クーポン
Linuxのコース無料クーポン + このセミナーのアーカイブが特典です。

超朗報!

🎉 2026年 Docker講座を何回か無料でやるよ!

UdemyのDocker講座の最初のレクチャーをリアルタイムで教えます。

💡 理由:Udemyは興味を持つ前に離脱する人が多い...
→ 最初をみんなで学べばやる気UP!継続できる!
面白さに気づく。おもしろければもう成功したようなもの!🚀

Dockerとは何か

Docker(ドッカー)は、アプリケーションとその実行環境を「コンテナ」という単位でパッケージ化し、 どこでも同じように動かせるようにするツールです。

💡 一言で言うと

「アプリと環境をセットにして、どこでも同じように動かせる箱」

🎯 Dockerが解決する問題

プログラミングをしていると、こんな経験ありませんか?

😫 よくある悩み

  • 「自分のPCでは動くのに、本番サーバーで動かない...」
  • 「新しいメンバーの環境構築に丸1日かかった...」
  • 「Pythonのバージョンがプロジェクトごとにバラバラ...」
  • 「開発環境が壊れて、再構築に数時間...」

Dockerを使うと、これらの問題がすべて解決します。 アプリケーションと、それを動かすために必要なすべて(OS、ライブラリ、設定ファイルなど)を 1つのパッケージにまとめられるからです。

✨ Dockerを使うと

  • どこでも同じ環境 - 開発・テスト・本番で完全に同じ環境
  • 環境構築が秒で完了 - コマンド1つで環境が立ち上がる
  • 汚れない - ホストPCに影響を与えない
  • 簡単に破棄・再作成 - やり直しが簡単

実際の環境構築で比較してみよう

「Dockerが便利」と言われても、ピンとこないかもしれません。
実際にAWS EC2でUbuntuサーバーを立てて、Node.js + MongoDBの環境を構築する場合を比較してみましょう。

😓 従来の方法(Ubuntuサーバーに直接構築)

EC2インスタンスを作成し、AWSマネジメントコンソールからUbuntuに接続したとします。
ここから環境構築を始めると...

1
システムの更新とNode.jsのインストール
sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
2
MongoDBのインストール
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
3
MongoDBの起動
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod
4
アプリケーションコードの作成
cat > package.json << 'EOF' { "name": "myapp", "version": "1.0.0", "main": "app.js", "dependencies": { "express": "^4.18.2", "mongodb": "^6.3.0" } } EOF
cat > app.js << 'EOF' const express = require('express'); const { MongoClient } = require('mongodb'); const app = express(); app.use(express.urlencoded({ extended: true })); const mongoHost = process.env.MONGO_HOST || 'localhost'; const url = 'mongodb://' + mongoHost + ':27017'; const client = new MongoClient(url); app.get('/', async (req, res) => { try { await client.connect(); const db = client.db('myapp'); const collection = db.collection('visitors'); const visitors = await collection.find().sort({ timestamp: -1 }).toArray(); let visitorList = visitors.map(v => '<li>' + v.name + '(' + v.timestamp.toLocaleString('ja-JP') + ')</li>' ).join(''); let html = '<h1>訪問者リスト</h1>'; html += '<form method="POST" action="/register">'; html += '<input type="text" name="name" placeholder="名前を入力" required>'; html += '<button type="submit">登録</button>'; html += '</form>'; html += '<h2>入った人一覧(' + visitors.length + '人)</h2>'; html += '<ul>' + (visitorList || '<li>まだ誰もいません</li>') + '</ul>'; res.send(html); } catch (err) { res.send('エラー: ' + err.message); } }); app.post('/register', async (req, res) => { try { await client.connect(); const db = client.db('myapp'); const collection = db.collection('visitors'); await collection.insertOne({ name: req.body.name, timestamp: new Date() }); res.redirect('/'); } catch (err) { res.send('エラー: ' + err.message); } }); app.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); }); EOF
5
パッケージのインストールと起動
npm install
node app.js
6
セキュリティグループの設定

AWSマネジメントコンソールでEC2のセキュリティグループを編集し、
ポート3000を開放する必要があります:

  1. EC2ダッシュボードでインスタンスを選択
  2. セキュリティグループタブをクリック
  3. インバウンドルールを編集
  4. カスタムTCP、ポート3000、ソース0.0.0.0/0を追加
  5. 保存
7
IPアドレスでアクセス確認

ブラウザでhttp://<EC2のパブリックIP>:3000にアクセスして動作確認
(例:http://54.123.45.67:3000

😫 従来の方法の本当の問題

問題は時間ではありません。本当の地獄はここから始まります。

  • 🔥 依存関係の地獄: パッケージのバージョンが合わない、ライブラリが競合する...解決に数時間〜数日かかることも
  • 😱 「僕の環境では動くのに...」: チームメンバーの環境で動かない。原因究明に半日〜1日消える
  • 💀 本番環境で突然のエラー: 開発では問題なかったのに本番で動かない。デプロイ失敗でリリースが遅延
  • 🐛 環境の微妙な違い: Node.jsのバージョン、OSの違い...デバッグに何日も費やす
  • 🔧 トラブルシューティング地獄: エラーメッセージをググり、Stack Overflowを漁り、試行錯誤を繰り返す無限ループ
  • 🗑️ 環境の汚染: 古いプロジェクトのパッケージが残り、新しいプロジェクトに影響。クリーンアップしても完全には消えない

→ 環境構築だけで数日〜1週間かかることも珍しくありません。これが現実です。

✨ Dockerを使った方法

同じ環境を、Dockerで構築してみましょう。
まず、EC2のUbuntuにDockerをインストールします。

1
DockerとDocker Composeのインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

※ 再ログインしてグループ変更を反映させます

2
プロジェクトファイルを作成

必要なのは2つのファイルだけです。

📄 Dockerfile

FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "app.js"]

📄 docker-compose.yml

services: web: build: . ports: - "3000:3000" environment: - MONGO_HOST=db depends_on: db: condition: service_healthy restart: on-failure db: image: mongo:7.0 volumes: - mongo_data:/data/db healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 5s timeout: 5s retries: 5 volumes: mongo_data:
3
起動はたったの1コマンド
docker compose up -d

🎉 ブラウザでアクセスして動作確認。完了!

✅ Dockerのメリット

  • Dockerのインストールは一度だけ: 最初の1回だけで、その後は不要
  • アプリごとの環境構築が超簡単: ファイルを作ってコマンド1つで完了
  • ミスがない: ファイルに全て書いてあるので、タイプミスなし
  • 100%再現可能: 誰がやっても、どこでやっても同じ環境
  • チーム共有が簡単: ファイルをGitで共有するだけ
  • クリーンアップが簡単: docker compose down -vで完全削除
  • 複数環境を同時に: プロジェクトごとに独立した環境を持てる
従来の方法
😓
依存関係地獄
何度もコマンド実行
設定ミスのリスク
環境の違いが発生
トラブルに数日かかる
Dockerを使った方法
完璧に動く
コマンド1つだけ
ミスゼロ
完全に同じ環境
トラブルなし

📝 Dockerの本質:環境をコードで管理する

Dockerの真の価値は、「環境をコードで管理できる」ことです。
これは現代のソフトウェア開発における重要なトレンド「X as Code」の一つです。

🏗️ Infrastructure as Code (IaC)

Terraformでインフラをコード化するように、Dockerで開発環境をコード化します。
Dockerfileは最も一般的なIaCの形式の一つで、チームが「バージョン管理可能、テスト可能、自動化可能なコード」を通じてインフラを管理できるようにします。

  • Terraform: AWSやGCPのインフラをコードで定義
  • Docker: 開発環境やアプリケーション実行環境をコードで定義

📚 コードがドキュメント

従来は「環境構築手順書」というドキュメントを作成していました。
しかし、ドキュメントには大きな問題があります:

  • すぐに古くなる: 環境が変わってもドキュメントは更新されない
  • 曖昧: 「適切に設定してください」など、解釈が分かれる
  • 間違いに気づけない: 手順書が間違っていても実行するまでわからない

一方、Dockerの設定ファイル(Dockerfiledocker-compose.yml)は:

  • 常に最新: 動いているコードが最新のドキュメント
  • 明確: 曖昧さゼロ。書いてある通りに実行される
  • すぐに検証できる: 実行すれば動くかどうかすぐわかる

🔄 他の「X as Code」の例

現代の開発では、あらゆるものを「コード化」して管理します:

  • CI/CD as Code: GitHub Actions、GitLab CIの.ymlファイル
  • Configuration as Code: Ansible、Chef、Puppetでサーバー設定を管理
  • Database as Code: マイグレーションファイルでDB構造を管理(Rails、Laravel、Prismaなど)
  • Policy as Code: Open Policy Agent (OPA)でセキュリティポリシーを定義

🎯 なぜ「コード化」が重要なのか

  • 📊 バージョン管理できる: Gitで変更履歴を追跡、いつでも過去に戻せる
  • 👥 レビューできる: Pull Requestで環境の変更をレビュー可能
  • 🤖 自動化できる: CI/CDで自動テスト・デプロイ
  • 🔁 再現可能: 誰が実行しても、いつ実行しても同じ結果
  • 🧪 テストできる: コードだから自動テストが書ける
  • 🌍 共有できる: チーム全員が同じ環境で開発できる

🔒 Immutable Infrastructure(不変なインフラ)

Dockerのもう1つの重要な概念が「イミュータブル(不変)」です。

※ 以下の「ペット vs 家畜」の比喩は、Randy Bias が2012年頃に提唱したクラウドインフラ(サーバー)の設計思想です。
Dockerのコンテナ管理も、この同じ思想を採用しています。
参考: The History of Pets vs Cattle

❌ 従来の方法(ペット型)
サーバーを大切に育てる:
「このサーバーのNode.jsを
v16からv18にアップデート」

→ 徐々に環境が変化
→ 誰かが勝手に設定変更
→ 環境が汚れていく
✅ Docker(家畜型)
毎回ゼロから作り直す:
「Node.js v18のコンテナを新規作成、
古いコンテナは削除」

→ 常にクリーンな環境
→ 予期しない変更ゼロ
→ ロールバックも簡単

メリット:

  • 環境が絶対に汚れない
  • 「誰かが勝手に設定を変えた問題」が発生しない
  • 問題が起きたら古いバージョンに一瞬で戻せる
  • 全く同じ環境を何度でも再現できる

🌐 ポータビリティ(どこでも動く)

Dockerで作った環境は、どこでも全く同じように動きます
これが「Write once, run anywhere(一度書けば、どこでも動く)」の思想です。

💻
開発環境
Mac / Windows / Linux
🧪
ステージング
AWS / GCP / Azure
🚀
本番環境
どのクラウドでもOK
↓ 全て同じDockerファイルで動く ↓

これで解決する問題:

  • 「僕の環境では動くのに...」問題: 全員が同じDocker環境を使うので発生しない
  • クラウドのロックイン回避: AWS固有の機能に依存せず、いつでも移行可能
  • ローカルと本番の差異: 開発環境も本番環境も完全に同じ
  • 新メンバーの環境構築: 5分で全員が同じ環境で開発開始

💡 まとめ:Dockerの3つの本質

1️⃣ 環境をコードで管理: ドキュメント不要、常に最新
2️⃣ イミュータブル: 環境が汚れない、予期しない変更ゼロ
3️⃣ ポータビリティ: どこでも同じように動く

Dockerは単なるツールではなく、現代的な開発思想の体現です。
これから学習を進めていくと、この便利さを実際に体験できます。

📚 参考資料:
Docker公式: What is Docker? - Dockerの概要とメリット
Docker日本語ドキュメント - Docker公式ドキュメントの日本語翻訳プロジェクト

新しいスクールを立ち上げたい

🤖

💡 プログラマーにならないためのプログラミングスクール

生成AIの急速な進化により、プログラミング未経験者でも自分に必要なツールやシステムを自ら作れる時代が到来している。

🎯 現実を見てほしい

  • 営業経験のない人が作る「AI営業エージェント」
  • 現場を知らない人が作る「業務効率化SaaS」

→ かゆいところに手が届かない 😫

✨ ドメイン知識 × プログラミング = 最強

📊 経理・財務

PL/BSが読めて、Pythonで集計分析ツールを自分で作る

⚖️ 法務

法務に詳しく、顧客対応や法的分析ツールを自分で作る

🏠 不動産営業

現場を知り尽くした人が、本当に必要なツールを自分で作る

🔄 プログラマーの仕事も変わった

プログラマーはもはやほぼコードを書かない。
適切な構成を考え、適切な命令を出し、正しく動くか判断するのが主な仕事。

経験がないとできないが、コードを書く作業はなくなり、
時間を取れて参入するハードルは確実に下がった。

⚡ 生産性が上がり、少人数でも回る時代
フルスタックでの対応が求められるようになっている

📚 カリキュラム(4ヶ月)

1ヶ月目

Claude Code等、最先端CLIツールを使いこなす

その時最先端のツールを1つマスター

2ヶ月目

Pythonの基礎

プログラミングの基礎を身につける

3ヶ月目

実務で使えるツールを作成

講師が実務で作ったツールに近いものを作る

4ヶ月目

自分の業務で使うツールを作る

本当に必要なものを作る(できれば2つ以上)

💬

Slackで交流

期限なしで交流は続ける

📖

テキストはWeb上で

生徒限定(ログインあり)
期限なし・役立つツール出たら更新してSlackでお知らせ

受講料

33万円(税込)

📝 アンケートにご協力ください

ニーズなければやめます