Docker入門 — コンテナって何?Javaエンジニアが知るべき基礎
はじめに
Dockerはアプリをコンテナという単位でパッケージ化して動かす仕組みです。
「自分のPCでは動くのに本番では動かない」という問題を解決できます。AWSのECSやFargateもDockerコンテナをベースにしています。
コンテナとは
| 比較 | 仮想マシン(VM) | コンテナ |
|---|---|---|
| 起動速度 | 数分 | 数秒 |
| サイズ | GBオーダー | MBオーダー |
| 独立性 | OSごと分離 | OSカーネルを共有 |
| 用途 | 完全な環境分離 | アプリの軽量パッケージ化 |
主な用語
| 用語 | 説明 |
|---|---|
| イメージ | コンテナの設計図。docker buildで作る |
| コンテナ | イメージを起動したもの。実際に動く実体 |
| Dockerfile | イメージを作るための設定ファイル |
| Docker Hub | イメージの公開レジストリ(GitHubのDocker版) |
Spring BootアプリのDockerfile
# ベースイメージ(Java 21)
FROM eclipse-temurin:21-jre
# 作業ディレクトリ
WORKDIR /app
# JarファイルをコンテナにコピーRun
COPY target/myapp-0.0.1-SNAPSHOT.jar app.jar
# ポートの公開
EXPOSE 8080
# 起動コマンド
ENTRYPOINT ["java", "-jar", "app.jar"]
基本コマンド
# イメージをビルド
docker build -t myapp:latest .
# コンテナを起動
docker run -p 8080:8080 myapp:latest
# 動いているコンテナを確認
docker ps
# コンテナを停止
docker stop <コンテナID>
# Docker Hubからイメージを取得
docker pull mysql:8.0
docker-composeでローカル開発環境を作る
Spring Boot + MySQLの構成をdocker-composeで一発起動できます。
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=password
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=mydb
ports:
- "3306:3306"
# まとめて起動
docker compose up -d
# まとめて停止
docker compose down
まとめ
| やること | コマンド/ファイル |
|---|---|
| イメージ作成 |
Dockerfile を書いて docker build
|
| コンテナ起動 | docker run -p 8080:8080 myapp |
| 複数サービス |
docker-compose.yml で docker compose up
|
| イメージ取得 | docker pull mysql:8.0 |
Dockerを使うとJavaアプリのデプロイがJarファイルではなくコンテナイメージになります。AWSのECS/Fargateへのデプロイも同じDockerイメージを使います。