Dockerとは?
Dockerはコンテナ型仮想化技術を用いたアプリケーション開発・実行環境です。軽量で移植性に優れ、依存関係を含めた環境をコード化できます。開発環境と本番環境の差異をなくし、チーム開発やCI/CDを効率化します。
イメージ操作
イメージのダウンロード
# 最新版を取得
docker pull ubuntu
# タグ指定で取得
docker pull ubuntu:22.04
ローカルイメージ一覧
# イメージ一覧
docker images
# イメージIDのみ表示
docker images -q
Dockerfileからイメージ作成
# カレントディレクトリのDockerfileでビルド
docker build -t myapp:latest .
# Dockerfile名指定
docker build -f Dockerfile.dev -t myapp:dev .
イメージの削除
# イメージIDで削除
docker rmi IMAGE_ID
# 未使用イメージをまとめて削除
docker image prune
コンテナ操作
コンテナの起動
# バックグラウンド起動
docker run -d --name mycontainer nginx
# ポートマッピング
docker run -d -p 8080:80 nginx
# インタラクティブモード(シェル起動)
docker run -it ubuntu bash
コンテナ一覧
# 実行中のコンテナ
docker ps
# すべてのコンテナ(停止中含む)
docker ps -a
コンテナの停止・再起動
# 停止
docker stop CONTAINER_ID
# 再起動
docker restart CONTAINER_ID
# 一時停止/再開
docker pause CONTAINER_ID
docker unpause CONTAINER_ID
コンテナの削除
# コンテナ削除
docker rm CONTAINER_ID
# 強制削除
docker rm -f CONTAINER_ID
# 停止中のコンテナをまとめて削除
docker container prune
コンテナ内部操作
コマンド実行
# コンテナ内でコマンド実行
docker exec CONTAINER_ID ls -la
# インタラクティブシェル起動
docker exec -it CONTAINER_ID bash
ログ確認
# ログ表示
docker logs CONTAINER_ID
# リアルタイムログ
docker logs -f CONTAINER_ID
ファイルコピー
# ホスト → コンテナ
docker cp file.txt CONTAINER_ID:/path/
# コンテナ → ホスト
docker cp CONTAINER_ID:/path/file.txt .
Docker Compose
サービス起動
# バックグラウンド起動
docker compose up -d
# ビルドしてから起動
docker compose up -d --build
サービス停止
# 停止のみ
docker compose stop
# 停止 + コンテナ削除
docker compose down
ログ確認
# 全サービスのログ
docker compose logs -f
# 特定サービスのログ
docker compose logs -f web
コマンド実行
# シェル起動
docker compose exec web bash
# 1回限りのコマンド実行
docker compose run web python manage.py migrate
Dockerfile 基本構文
Node.js アプリの例
# ベースイメージ
FROM node:18-alpine
# 作業ディレクトリ
WORKDIR /app
# 依存関係ファイルコピー
COPY package*.json ./
# パッケージインストール
RUN npm install
# ソースコードコピー
COPY . .
# ポート公開
EXPOSE 3000
# 起動コマンド
CMD ["npm", "start"]
Python アプリの例
# ベースイメージ
FROM python:3.11-slim
# 作業ディレクトリ
WORKDIR /app
# 依存関係ファイルコピー
COPY requirements.txt .
# パッケージインストール
RUN pip install --no-cache-dir -r requirements.txt
# ソースコードコピー
COPY . .
# ポート公開
EXPOSE 8000
# 起動コマンド
CMD ["python", "app.py"]
主要命令
FROM
ベースイメージ指定
WORKDIR
作業ディレクトリ設定
COPY
ホストからファイルコピー
RUN
ビルド時コマンド実行
EXPOSE
公開ポート番号指定
CMD
デフォルト起動コマンド
ENV
環境変数設定
VOLUME
ボリュームマウントポイント
ボリューム・ネットワーク
ボリューム操作
# ボリューム作成
docker volume create myvolume
# ボリューム一覧
docker volume ls
# ボリューム削除
docker volume rm myvolume
# マウント例
docker run -v myvolume:/data nginx
ネットワーク操作
# ネットワーク作成
docker network create mynetwork
# ネットワーク一覧
docker network ls
# ネットワーク削除
docker network rm mynetwork
# コンテナをネットワークに接続
docker run --network mynetwork nginx
実務で役立つTips
一括クリーンアップ
停止中コンテナ、未使用イメージ、ボリューム、ネットワークを一括削除
docker system prune -a
ディスク使用量確認
イメージ、コンテナ、ボリュームの使用量を確認
docker system df
リソース監視
実行中コンテナのCPU、メモリ使用状況をリアルタイム表示
docker stats
詳細情報確認
コンテナやイメージの詳細設定をJSON形式で表示
docker inspect CONTAINER_ID
docker run のよく使うオプション
-d
バックグラウンド実行
-it
インタラクティブモード + 疑似ターミナル
--name
コンテナ名指定
-p
ポートマッピング(ホスト:コンテナ)
-v
ボリュームマウント
-e
環境変数設定
--rm
終了時に自動削除
--network
ネットワーク指定
--env-file
環境変数ファイル指定
危険な操作(要注意)
全コンテナ強制削除
# 実行中含むすべてのコンテナを強制削除
docker rm -f $(docker ps -aq)
全イメージ削除
# すべてのイメージを削除
docker rmi -f $(docker images -q)
システム完全クリーンアップ
# ボリュームも含めて完全削除
docker system prune -a --volumes
特権モード実行
# ホストへフルアクセス可能に
docker run --privileged ubuntu