Docker入門|20年現場で見てきた環境構築の変遷と始め方

「手順書通りにやったのに動かない」「自分のPCでは動くのに、他の人の環境だとエラーになる」

開発の現場でこんな経験をしたことはないでしょうか。私は20年以上エンジニアとして様々な現場を見てきましたが、環境構築にまつわるトラブルは本当に多く、時には丸一日を費やすこともありました。

Dockerは、こうした「環境の違いによる問題」を根本から解決するために生まれた技術です。この記事では、Dockerの基本概念から実際の使い方まで、初心者の方にもわかりやすく解説します。

Dockerとは何か?一言で理解する

Dockerとは、アプリケーションの実行環境をまるごとパッケージ化して、どこでも同じように動かせる仕組みです。

たとえば、あなたが作ったWebアプリがあるとします。このアプリを動かすには、特定のバージョンのNode.jsが必要で、データベースも必要で、いくつかのライブラリも必要です。従来は、これらを一つひとつ手作業でインストールして設定していました。

Dockerを使えば、これらの「アプリを動かすために必要なもの一式」をひとつの箱(コンテナ)にまとめられます。この箱さえあれば、WindowsでもMacでもLinuxでも、同じようにアプリが動きます。

なぜDockerが必要になったのか?昔の開発現場の話

Dockerの価値を理解するには、Dockerがなかった時代の苦労を知るのが一番です。

手順書地獄の時代

10〜15年ほど前、新しいプロジェクトに参加すると、まず渡されるのが「環境構築手順書」でした。ひどいときには50ページ以上あり、「このソフトをインストールして、この設定ファイルをこう書き換えて、この環境変数を設定して…」と延々と続きます。

しかも、この手順書通りにやっても動かないことが珍しくありませんでした。なぜなら、手順書を作った人のPCと自分のPCでは、すでにインストールされているソフトのバージョンが違ったり、OSの設定が微妙に異なったりするからです。

「私のPCでは動きます」問題

開発中によく起きたのが、「自分の環境では正常に動くのに、他の人の環境やサーバーにデプロイすると動かない」という問題です。

原因を調べると、Javaのバージョンが8と11で違っていたとか、ライブラリのマイナーバージョンが違っていたとか、そういった些細な差異が原因でした。本番リリース直前に発覚して、深夜まで対応に追われたことも一度や二度ではありません。

Dockerが解決したこと

Dockerは、この「環境の差異」という根本的な問題を解決しました。アプリケーションと、それを動かすために必要な環境をすべてひとまとめにして配布できるようになったのです。

開発者のPCで動いたコンテナは、テスト環境でも本番環境でも、まったく同じように動きます。「環境が違うから動かない」という言い訳が通用しなくなった代わりに、環境構築で苦しむ時間が劇的に減りました。

Dockerの基本概念を押さえる

Dockerを使いこなすために、まず3つの重要な概念を理解しましょう。

イメージ(Image)

イメージは、コンテナを作るための「設計図」です。

たとえば「Python 3.11がインストールされたLinux環境」や「nginx(Webサーバー)が設定済みの環境」といった、特定の状態を記録したものがイメージです。

イメージ自体は読み取り専用で、変更することはできません。イメージをもとにコンテナを作成して使います。

コンテナ(Container)

コンテナは、イメージから作られた「実際に動く環境」です。

イメージが設計図だとすれば、コンテナはその設計図から建てられた家のようなものです。同じ設計図(イメージ)から、何個でも家(コンテナ)を建てることができます。

コンテナは起動したり停止したり、中でコマンドを実行したりできます。不要になったら削除して、また必要になったらイメージから新しく作れます。

Dockerfile

Dockerfileは、イメージを作るためのレシピです。

「Ubuntu をベースにして、Node.js をインストールして、このアプリのコードをコピーして、このコマンドで起動する」といった手順をテキストファイルに記述します。このDockerfileがあれば、誰でも同じイメージを作成できます。

Docker Hub

Docker Hubは、イメージを共有するためのサービスです。GitHubのDocker版と考えるとわかりやすいでしょう。

公式のイメージ(nginx、MySQL、Pythonなど)が多数公開されており、自分でゼロから作らなくても、必要なイメージをダウンロードしてすぐに使えます。

Dockerを実際に動かしてみよう

概念を理解したら、実際に手を動かしてみましょう。

Docker Desktopのインストール

まずはDocker Desktopをインストールします。WindowsでもMacでも、公式サイトからインストーラーをダウンロードして実行するだけです。

Docker Desktop公式サイト

インストールが完了したら、ターミナル(Windowsならコマンドプロンプト、Macならターミナル)を開いて、以下のコマンドを実行してください。

docker --version

バージョン情報が表示されれば、インストール成功です。

最初のコンテナを起動する

では、実際にコンテナを起動してみましょう。以下のコマンドを実行してください。

docker run hello-world

初回は「hello-world」というイメージをDocker Hubからダウンロードするため、少し時間がかかります。成功すると、「Hello from Docker!」から始まるメッセージが表示されます。

これだけで、あなたは初めてのDockerコンテナを起動できました。

Webサーバーを立ち上げてみる

もう少し実用的な例として、Webサーバー(nginx)を起動してみましょう。

docker run -d -p 8080:80 nginx

このコマンドを実行したら、ブラウザで http://localhost:8080 にアクセスしてください。「Welcome to nginx!」というページが表示されるはずです。

たった1行のコマンドで、Webサーバーが立ち上がりました。従来であれば、nginxをダウンロードして、設定ファイルを編集して、サービスを起動して…という作業が必要でしたが、Dockerならこれだけです。

覚えておきたい基本コマンド5つ

Dockerを使う上で、最低限覚えておきたいコマンドを紹介します。

1. docker run
イメージからコンテナを作成して起動します。

docker run イメージ名

2. docker ps
現在動いているコンテナの一覧を表示します。

docker ps

停止中のコンテナも含めて表示するには -a オプションをつけます。

docker ps -a

3. docker stop
コンテナを停止します。

docker stop コンテナID

4. docker rm
停止したコンテナを削除します。

docker rm コンテナID

5. docker images
ダウンロード済みのイメージ一覧を表示します。

docker images

まずはこの5つを覚えておけば、基本的な操作はできるようになります。

実務ではDockerがどう使われているか

Dockerは学習用のツールではなく、実際の開発現場で幅広く使われています。ここでは代表的な活用シーンを紹介します。

開発環境の共有

チーム開発では、全員が同じ環境で作業することが重要です。Dockerを使えば、Dockerfileとdocker-compose.yml(複数のコンテナを管理する設定ファイル)をリポジトリに含めておくだけで、新しくプロジェクトに参加したメンバーも docker compose up の一発で開発環境が整います。

「環境構築に3日かかる」というプロジェクトが、「5分で開発開始できる」プロジェクトに変わります。

CI/CDパイプライン

GitHub ActionsやCircleCIなどのCI/CDツールでも、Dockerは欠かせません。テストを実行する環境をDockerで統一することで、「ローカルではテストが通るのにCIでは失敗する」という問題を防げます。

本番環境への展開

AWSのECS(Elastic Container Service)やEKS(Elastic Kubernetes Service)、Google CloudのCloud Runなど、主要なクラウドサービスはDockerコンテナをそのままデプロイできる仕組みを提供しています。

開発環境で動作確認したコンテナを、そのまま本番環境にデプロイできるため、「本番だけで起きる謎のバグ」が大幅に減ります。

まとめ:Dockerは現代の開発に欠かせないスキル

この記事では、Dockerの基本概念から実際の使い方までを解説しました。

Dockerを学ぶことで得られるメリットを改めて整理すると、環境構築の時間が劇的に短縮される、「自分の環境では動く」問題から解放される、チームでの開発環境を簡単に統一できる、本番環境との差異によるトラブルが減る、といった点が挙げられます。

20年前の開発現場を知る身としては、Dockerの登場は本当に革命的でした。環境構築に費やしていた膨大な時間を、本来の開発作業に使えるようになったのですから。

まずは今回紹介した基本コマンドを実際に試してみてください。そこから徐々にDockerfileの書き方やDocker Composeの使い方を学んでいけば、開発効率は確実に向上します。

次のステップとしては、Docker Composeを使った複数コンテナの管理や、実際のアプリケーションをDockerで動かす方法を学ぶことをおすすめします。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です