Dockerを使ってみた:コンテナ化の魅力と実際の手順

Dockerは、ソフトウェア開発と運用(DevOps)の分野で非常に人気のあるツールです。コンテナ技術を活用することで、アプリケーションを一貫して実行可能な状態で、開発から本番環境まで簡単にデプロイできるようになります。今回は、実際にDockerを使ってみた体験と、コンテナ化の魅力について紹介します。

#1. Dockerとは?

Dockerは、ソフトウェアを「コンテナ」と呼ばれる軽量の仮想化環境にパッケージ化して実行するためのプラットフォームです。コンテナは、アプリケーションとその依存関係を一つのユニットとしてまとめることができ、開発環境から本番環境に至るまで、一貫した動作を保証します。

簡単に言うと、Dockerはアプリケーションの実行環境をコードとして管理し、どこでも同じように動かすことができるツールです。

#2. Dockerのインストール

まず、Dockerを使うためには、Dockerのインストールが必要です。Dockerは公式サイトからダウンロードできます。

  • Windows/Mac: Docker Desktopをインストール
  • Linux: 各ディストリビューション向けにインストールガイドが提供されています(例えば、Ubuntuの場合はaptでインストールできます)。

インストール後、ターミナルで次のコマンドを実行して、インストールが成功していることを確認します。

docker --version

これでDockerのバージョンが表示されれば、インストールは正常に完了しています。

#3. Dockerコンテナの基本操作

3.1 Dockerイメージとは

Dockerイメージは、アプリケーションとその依存関係、設定をすべて含むテンプレートです。イメージは不変であり、コンテナはそのイメージを基に実行されます。例えば、nodeというイメージを使用することで、Node.jsのアプリケーションを実行する環境が整います。

3.2 コンテナの起動

Dockerイメージからコンテナを起動するには、次のコマンドを使います。例えば、nginxの公式イメージを使用してコンテナを実行する場合:

docker run --name my-nginx -d -p 8080:80 nginx

このコマンドの説明:

  • -name my-nginx: コンテナに名前をつける。
  • d: コンテナをバックグラウンドで実行。
  • p 8080:80: ホストのポート8080をコンテナのポート80にマッピング。
  • nginx: 使用するDockerイメージ。

これで、ブラウザで http://localhost:8080 にアクセスすると、Nginxのデフォルトページが表示されます。

3.3 コンテナの停止と削除

実行中のコンテナを停止するには、次のコマンドを使います:

docker stop my-nginx

コンテナを完全に削除するには:

docker rm my-nginx

#4. Dockerfileによるカスタムイメージの作成

Dockerでは、Dockerfileという設定ファイルを使って、カスタムイメージを作成することができます。Dockerfileには、どのベースイメージを使うか、アプリケーションをどうインストールするかなどを記述します。

例えば、Node.jsアプリケーションのためのDockerfileを作成する場合:

# 使用するベースイメージ FROM node:14 # 作業ディレクトリを設定 WORKDIR /app # package.json と package-lock.json をコンテナにコピー COPY package*.json ./ # 必要な依存関係をインストール RUN npm install # アプリケーションコードをコンテナにコピー COPY . . # コンテナのポート3000を公開 EXPOSE 3000 # アプリケーションを起動 CMD ["npm", "start"]

このDockerfileをプロジェクトのルートディレクトリに作成した後、次のコマンドでイメージをビルドします:

docker build -t my-node-app .

これで、my-node-appという名前のイメージが作成されます。そして、以下のコマンドでコンテナを実行できます:

docker run -d -p 3000:3000 my-node-app

これで、http://localhost:3000にアクセスすると、Node.jsアプリケーションが表示されます。

#5. Docker Composeで複数のコンテナを管理

複数のサービスを必要とするプロジェクト(例えば、Node.jsとデータベース)では、docker-compose.ymlを使って、複数のコンテナを一元管理できます。

例えば、Node.jsアプリケーションとMongoDBを一緒に起動するためのdocker-compose.ymlは以下のようになります:

version: '3' services: app: build: . ports: - "3000:3000" depends_on: - db db: image: mongo ports: - "27017:27017"

これで、以下のコマンドを使って、両方のコンテナを一度に起動できます:

docker-compose up

#6. Dockerのメリット

  • 環境依存の排除: Dockerはコンテナ内でアプリケーションを実行するため、開発環境や本番環境での依存関係の違いを排除できます。
  • 軽量で高速: 仮想マシンに比べて軽量で、起動も非常に速いです。
  • 移植性: Dockerコンテナはどこでも同じように実行できるため、環境による差異を気にせず、開発・本番環境を統一できます。
  • スケーラビリティ: Dockerを使えば、簡単にマイクロサービスアーキテクチャを構築したり、スケーラブルなサービスを作ることができます。

#7. まとめ

Dockerを使うことで、アプリケーションの開発から本番環境へのデプロイまで、環境の統一が簡単にできます。コンテナ化は、特に複数の環境で動作するアプリケーションや、マイクロサービスアーキテクチャに最適な解決策です。Dockerの基本的な使い方を理解すれば、プロジェクトの開発効率を大幅に向上させることができます。コンテナ化のメリットを享受しながら、Dockerをうまく活用していきましょう。

タグ一覧