近年、ソフトウェア開発の現場でよく聞く「Docker」や「コンテナ」という言葉。これらは特にクラウド環境でのアプリケーション運用や開発において、欠かせない存在となっています。この記事では、Dockerの基本概念である「コンテナ」について詳しく解説し、さらにDockerの簡単なコマンド操作を通じてその利便性を実感していただきます。
コンテナとは?
コンテナの概要
「コンテナ」とは、アプリケーションとその動作に必要な環境(ライブラリや設定など)を1つのパッケージとしてまとめ、他の環境から独立して動作させる仕組みのことです。
ポイントは、軽量で高速なこと、これがコンテナの大きな特徴です。従来の仮想マシン(Virtual Machine)と異なり、ホストOS(実際に動いているPCやサーバーのOS)の一部を共有して動作するため、リソースの節約が可能です。
カーネルとは?
コンテナを語る際に出てくる「カーネル」という言葉について簡単に説明します。
カーネルとは、OS(オペレーティングシステム)の中核部分で、ハードウェアとアプリケーションの橋渡しを行う重要な役割を担っています。コンテナが軽量である理由の一つは、ホストOSのカーネル部分を共有して使用することで、独立したOSを構築する必要がないからです。
仮想マシンとの違い
コンテナは、軽量な「仮想環境」のように動作しますが、仮想マシンとは明確に異なります。以下にその違いを表で示します。
特徴 | コンテナ | 仮想マシン |
---|---|---|
起動時間 | 数秒 | 数分 |
リソース使用量 | 少ない | 多い |
OSの構成 | ホストOSのカーネルを共有 | 完全に分離された独立したOS |
メリット | 軽量、高速、移植性が高い | 完全に隔離された環境を提供 |
Dockerとは?
Dockerは、コンテナを簡単に作成・管理するためのツールです。特に以下の特徴を持っています。
- 軽量で高速:リソース効率が高く、数秒で環境を起動可能。
- 移植性:異なる環境間での動作を保証。
- 効率的な開発:環境の構築・破棄が容易で、作業効率を向上。
たとえば、「開発環境では動いていたアプリケーションが本番環境で動かない」という問題を、Dockerを使うことで解決できます。同じコンテナをどこでも再利用できるためです。
また、Dockerのワークフローは以下の3つのステップで構成されています。
- Build(構築)
アプリケーションとその依存関係をDockerfileで定義し、イメージを作成します。 - Ship(共有)
作成したイメージをDocker Hubやプライベートレジストリにプッシュして、他の環境で利用可能にします。 - Run(実行)
イメージからコンテナを起動し、アプリケーションを実行します。
この「Build, Ship, Run」という流れを活用することで、開発からデプロイまでをスムーズに一貫して行うことができ、効率的なソフトウェア開発が可能になります。
Dockerのインストールと起動などの基本コマンド
Dockerを使い始めるには、以下の手順でインストールを行います。
1. 公式サイトからDocker Desktopをダウンロード
公式サイトから「Docker Desktop」をダウンロードしてください。
docker version
実行結果として、Dockerのクライアントやサーバーのバージョン情報が表示されれば成功です。
Client:
Version: 27.3.1
API version: 1.47
Go version: go1.22.7
Git commit: ce12230
Built: Fri Sep 20 11:42:27 2024
OS/Arch: windows/amd64
Context: desktop-linux
2. コンテナイメージの取得
Docker Hubという公式レジストリから、MySQLのイメージをダウンロードしてみます。
docker pull mysql
このコマンドを実行すると、MySQLの最新バージョンのイメージが取得されます。ダウンロードが成功したら、以下のコマンドでイメージ一覧を確認できます。
docker images
3. コンテナの作成と起動コマンド
取得したMySQLイメージから、コンテナを作成して起動します。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=abcdefg -d mysql:latest
--name
:コンテナ名を指定。-e
:環境変数を指定(ここではMySQLのルートパスワード)。-d
:バックグラウンドで起動。
起動しているコンテナは以下のコマンドで確認できます。
docker ps
実行結果例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ea98e563b20 mysql:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp some-mysql
4. コンテナ内での操作
起動したMySQLコンテナに入り、MySQLの操作を行います。
docker exec -it some-mysql bash
MySQLに接続するには以下のコマンドを実行します。
mysql -u root -p
パスワードを入力後、以下のSQLコマンドでデータベースやテーブルを作成できます。
CREATE DATABASE sample_db;
USE sample_db;
CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO users(name) VALUES('Test');
5. コンテナの停止と削除
不要になったコンテナを停止し、削除する方法です。
停止
docker stop some-mysql
削除
docker rm some-mysql
6. コンテナの起動
停止中のコンテナを再起動するには以下を実行します:
docker start some-mysql
ネクストステップ
この記事ではDockerの基本操作を理解しました。次に、以下の内容も学んでみましょう。
1. Docker Compose
Docker Composeは、複数のDockerコンテナを効率的に管理・実行するためのツールです。YAMLファイルで複数のコンテナの設定を定義し、単一のコマンドで一括して起動・停止できます。これにより、複数のコンテナを簡単に管理でき、サービスの複製や拡張も容易になります。
詳細な解説やチュートリアルについては、以下の日本語記事が参考になります。
- Qiitaの記事(Docker Composeの基礎): Docker Composeの基本的な使い方やメリットについて詳しく解説されています。 Qiita記事
- Zennの記事(Docker Composeの基礎と実践): 初心者向けにDocker Composeの基礎から実践的な使い方までを紹介しています。 Zenn記事
2. Kubernetes
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を自動化するためのオープンソースのプラットフォームです。大規模なコンテナオーケストレーションを可能にし、複雑なアプリケーションの運用を効率化します。
日本語の公式ドキュメントが提供されており、詳細な情報を得ることができます。
- Kubernetes公式ドキュメント(日本語): Kubernetesの基本概念から高度な使用方法まで幅広くカバーされています。
3. Dockerfile
Dockerfileは、独自のDockerイメージを作成するための設定ファイルです。アプリケーションの環境構築をコードとして記述でき、再現性の高い環境を提供します。
日本語での詳細な解説については、以下の記事が参考になります。
- Zennの記事(Dockerfileの基礎と実践): Dockerfileの基本的な書き方やベストプラクティスについて詳しく解説されています。Zenn記事
これらのリソースを活用して、さらに高度な環境構築や運用管理のスキルを身につけてください。
Dockerは、アプリケーションの環境構築を効率化し、軽量なコンテナを通じて移植性や生産性を向上させるツールです。この記事では、Dockerの基本概念である「コンテナ」の仕組みから、実際に使うコマンド操作までを簡単に紹介しました。
ぜひ、この記事を参考に、実際にDockerを使ってコンテナを動かし、その便利さを体感してみてください!