Dockerとは?インストールと基本コマンドの使い方入門

Docker入門 アイキャッチ

Dockerを使ってみたいけれど、何をインストールして、どのコマンドから打てばいいのか分からないと手が止まっていませんか。Dockerとは何かを押さえたら、Windows・Mac・Linuxに入れて動作を確かめ、イメージの取得からコンテナの起動・確認・停止・削除まで、自分の手で試せます。

すでにDockerを入れてある場合は、「Dockerの基本コマンドの使い方」から始めてください。コマンドだけ見返したいときは「Dockerコマンド早見表」へ。

目次

Dockerとは?コンテナでアプリを動かすためのツール

Dockerは、アプリと、アプリを動かすのに必要なもの(ライブラリや設定など)を「コンテナ」という区切られた環境にまとめて動かすためのツールです。コンテナには動かすのに必要なものがそろっているので、Dockerを動かしているPC(ホスト)に何が入っているかに左右されません。同じコンテナを、自分のPCでも、ほかの人のPCでも、クラウドでも同じように動かせます(Docker公式ドキュメント「What is Docker?」)。

コンテナと仮想マシン(VM)の違い

仮想マシンは、カーネルやドライバーを含むOSを丸ごと動かします。コンテナは、動かすのに必要なファイルを持った「区切られたプロセス」で、いくつ動かしてもホストのカーネルを共有します。そのため、同じマシンでより多くのアプリを動かせます(公式ドキュメント「What is a container?」)。

  • 仮想マシン:OSを丸ごと動かす。カーネルもそれぞれが持つ
  • コンテナ:ホストのカーネルを共有し、アプリと動かすのに必要なファイルだけを持つ

クラウドでは、仮想マシンの上でDockerを動かし、1台の仮想マシンで複数のコンテナを動かす使い方もよくあります。

イメージ・コンテナ・Dockerfile・Docker Hubの関係

  • イメージ:コンテナを作るための読み取り専用のテンプレート。Ubuntuのイメージを元に、Webサーバーや自分のアプリを足したイメージを作ることもできます
  • コンテナ:イメージから作った、実際に動かすもの。作る・起動する・止める・削除するができます
  • Dockerfile:自分のイメージを作る手順を書くファイル
  • Docker Hub:だれでも使える公開のレジストリ(イメージの置き場)。docker pullやdocker runは、設定を変えていなければDocker Hubからイメージを取ってきます

コンテナを削除すると、ボリュームなどの残る場所に置いていない変更は消えます。消したくないデータ(データベースの中身など)は、ボリュームに置きます。

Dockerでできること

  • 開発環境をそろえる:チーム全員が同じイメージを使えば、「自分のPCでは動くのに、ほかの人のPCでは動かない」を減らせます
  • CI/CDで使う:テストやビルドを、毎回同じコンテナの中で動かせます(GitHub Actionsでの例は「GitHub Actionsの基礎から始めるCI/CD入門」)
  • 本番にデプロイする:作ったイメージを、データセンターやクラウドでもそのまま動かせます。たくさんのコンテナをまとめて動かすときは、Kubernetesを使うこともあります(「Kubernetes入門」)

Dockerのインストール方法(Windows・Mac・Linux)

WindowsとMacでは「Docker Desktop」を入れます。Docker Desktopには、Docker Engine(dockerd)、dockerコマンド、Docker Composeなどが入っています。Linuxでは、Docker Desktop for Linuxを入れるか、サーバーならDocker Engineだけを入れます。

Docker Desktopが無料で使えるのは、小さな会社(従業員250人未満、かつ年間売上1,000万ドル未満)、個人での利用、教育、営利目的でないオープンソースのプロジェクトです。それより大きな組織の仕事で使う場合や、政府機関で使う場合は、有料のサブスクリプション(Pro・Team・Business)が必要です。Docker Engineなどオープンソースのプロジェクトのライセンスは、この条件とは別です(2026年10月20日時点。公式「Docker Desktop license agreement」)。

Windows:WSL 2を確かめてからDocker Desktopを入れる

wsl --version

PowerShellかコマンドプロンプトで実行し、WSLのバージョンが2.1.5以上か確かめます。バージョンが表示されないときや古いときは、管理者として開いたPowerShellで更新します。

wsl --update

WSLが入っていないときは、wsl --updateの代わりにwsl --installを実行します。再起動を求められることがあります。

  1. 公式ページ「Install Docker Desktop on Windows」からインストーラーをダウンロードする
  2. Docker Desktop Installer.exeをダブルクリックする。インストールの方法は、初めから選ばれている「ユーザーごと(per-user)」のままで、管理者権限は要らない
  3. 設定の画面でバックエンドを選ぶ項目(「Use WSL 2 instead of Hyper-V」)が出たときは、WSL 2を選ぶ。項目が出ないときは、使えるものが自動で選ばれる
  4. 終わったらDocker Desktopを起動し、利用条件の画面で「Accept」を選ぶ

メモリは8GB以上、BIOS/UEFIでCPUの仮想化を有効にしておく必要があります。対応するWindowsのバージョンとエディションは、公式ページの「System requirements」で確かめてください。

Mac:Docker Desktopを入れる

公式ページ「Install Docker Desktop on Mac」で、Appleシリコン(M1以降)用とIntelチップ用のどちらかをダウンロードします。どちらのチップかは、Appleメニューの「このMacについて」で確かめられます。

  1. ダウンロードしたDocker.dmgを開き、DockerのアイコンをApplicationsフォルダへドラッグする
  2. ApplicationsフォルダのDocker.appをダブルクリックして起動する
  3. 利用条件の画面で「Accept」を選ぶ

メモリは4GB以上必要です。Docker Desktopが対応するのは、最新のmacOSとその前の2つのメジャーバージョンです。

Linux(Ubuntu):Docker Engineを入れる

# 1. 競合するパッケージ(docker.io など)を外す
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

# 2. Docker公式のGPGキーとaptリポジトリを追加する
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

# 3. Docker Engine・CLI・Docker Composeを入れる
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4. Dockerが動いているか確かめる
sudo systemctl status docker

Ubuntuのリポジトリにあるdocker.ioは、Docker社の公式パッケージではありません。公式の手順では、こうしたパッケージを先に外してから、Dockerのaptリポジトリから入れます。1.で「入っていない」と表示されても問題ありません。

公式の手順が対応しているのは、64ビット版のUbuntu 22.04・24.04・26.04・26.10です(2026年10月時点)。ほかのディストリビューションは、公式の「Install Docker Engine」で自分のOSのページを開いてください。

ufwやfirewalldでファイアウォールを設定している場合、Dockerで公開したコンテナのポートは、そのファイアウォールのルールを通りません。サーバーで-pを使うときは気をつけてください(公式「Install Docker Engine on Ubuntu」)。

Linux:sudoなしでdockerコマンドを使う

sudo groupadd docker
sudo usermod -aG docker $USER

dockerグループがすでにある場合、1行目は「すでにある」と表示されますが、そのまま2行目を実行してかまいません。そのあと一度ログアウトしてログインし直すと、sudoなしでdockerコマンドを使えます(仮想マシンでは再起動が必要なこともあります)。

dockerグループに入れたユーザーは、rootと同じくらいの権限を持ちます。ほかの人も使うサーバーでは、だれを入れるかに気をつけてください。rootを使わずに動かす「rootlessモード」もあります(公式「Rootless mode」)。

インストールできたか確かめる(docker version・hello-world)

docker version
docker run hello-world

docker versionでバージョンの情報が表示され、docker run hello-worldで確認のメッセージが表示されれば、インストールは終わりです。hello-worldはテスト用のイメージで、ダウンロードしてコンテナで動かし、メッセージを表示して終了します。Linuxでdockerグループの設定をしていない場合は、先頭にsudoを付けます。

Dockerの基本コマンドの使い方

Docker Hubからイメージを取ってきてコンテナとして動かし、止めて削除するまでを、上から順に打って試せます。Windowsならインストールのあとに開いたPowerShell、MacとLinuxならターミナルで実行します。

イメージを取得する(docker pull)

docker pull ubuntu

Docker Hubからubuntuイメージをダウンロードします。手元にあるイメージは、次のコマンドで一覧にできます。

docker images

コンテナを起動する(docker run)

docker run -it --name my-ubuntu ubuntu /bin/bash
  • -it:コンテナの中のシェルを、いま開いているターミナルから操作できるようにする(-iと-tをまとめたもの)
  • --name my-ubuntu:コンテナにmy-ubuntuという名前を付ける
  • ubuntu /bin/bash:ubuntuイメージからコンテナを作り、/bin/bashを動かす

コンテナの中のbashが起動し、コンテナの中でコマンドを打てるようになります。手元にイメージがないときは、docker runが先にダウンロードしてくれます。exitと打つとbashが終わり、コンテナは止まりますが、削除はされません。

Webサーバーのように動かし続けるコンテナは、-dと-pを付けて起動します。

docker run -d -p 8080:80 --name welcome docker/welcome-to-docker
  • -d:コンテナを裏で動かし、ターミナルはすぐ使えるようにする
  • -p 8080:80:PCの8080番ポートを、コンテナの80番ポートにつなぐ

ブラウザでhttp://localhost:8080を開くと、コンテナの中のWebサーバーが返すページが表示されます。docker/welcome-to-dockerは、Docker公式の入門で使われているイメージです。

動いているコンテナを確認する(docker ps)

docker ps
docker ps -a

docker psは動いているコンテナだけを表示します。止まっているコンテナ(さっきexitしたmy-ubuntuなど)も見るときは、-aを付けます。

コンテナのログを見る(docker logs)

docker logs welcome

コンテナが出力したログを表示します。-fを付けると、新しく出たログを追いかけて表示し続けます(Ctrl+Cで抜けます)。

コンテナを停止・再開する(docker stop・docker start)

docker stop welcome
docker start welcome

コンテナ名(またはコンテナID)を指定して止めます。docker stopは、コンテナの中のプロセスにまず終了の合図(SIGTERM)を送り、待っても終わらないとき(Linuxのコンテナでは、設定がなければ10秒)は強制終了(SIGKILL)します。止めたコンテナはdocker startでもう一度動かせます。

コンテナとイメージを削除する(docker rm・docker rmi)

# コンテナを削除する(動いているものは先に止める)
docker stop welcome
docker rm welcome my-ubuntu

# イメージを削除する
docker rmi docker/welcome-to-docker ubuntu

動いているコンテナは、そのままではdocker rmで削除できません。先にdocker stopで止めるか、-fを付けて強制的に削除します。イメージも、動いているコンテナが使っている間は-fなしでは削除できないので、コンテナを先に削除します。

Dockerコマンド早見表

# イメージを取得する
docker pull イメージ名

# 手元のイメージを一覧にする
docker images

# コンテナを作って起動する(-d:裏で動かす、-p:ポートをつなぐ、--name:名前を付ける)
docker run -d -p 8080:80 --name コンテナ名 イメージ名

# 動いているコンテナを一覧にする(-a:止まっているものも)
docker ps
docker ps -a

# ログを見る(-f:出続けるログを追う)
docker logs -f コンテナ名

# 止める・もう一度動かす
docker stop コンテナ名
docker start コンテナ名

# 削除する(コンテナ → イメージの順)
docker rm コンテナ名
docker rmi イメージ名

# Dockerfileからイメージを作る
docker build -t イメージ名 .

# compose.yaml のコンテナをまとめて起動する・止めて削除する
docker compose up -d
docker compose down

Dockerfileで自分のイメージを作る(docker build)

# ベースにするイメージ(使うPythonのバージョンに合わせて変える)
FROM python:3.13-slim

# 作業ディレクトリを /app にする
WORKDIR /app

# requirements.txt をイメージの中にコピーして、ライブラリを入れる
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリのファイルをコピーする
COPY . .

# コンテナの起動時に実行するコマンド
CMD ["python", "app.py"]

アプリのフォルダ(app.pyとrequirements.txtがある場所)にDockerfileという名前で保存します。そのフォルダで、次のコマンドを実行してイメージを作ります。

docker build -t my-python-app .

-tでイメージに名前(my-python-app)を付けます。最後の.は、いまいるフォルダを、ビルドに使うファイルの置き場所(ビルドコンテキスト)として渡すという意味です。DockerfileのCOPYは、このフォルダの中のファイルをコピーします。-fでDockerfileを指定しなければ、このフォルダのDockerfileが使われます(公式「Build context」)。できたイメージからコンテナを起動します。

docker run -d -p 8000:8000 my-python-app

この例は、アプリが8000番ポートで待ち受けている場合です。Dockerfileの命令は1つずつイメージの層(レイヤー)になり、Dockerfileを変えてビルドし直すと、変わった層だけが作り直されます(公式「What is Docker?」)。命令の書き方は公式の「Dockerfile reference」にあります。

Docker Composeで複数のコンテナをまとめて起動する

services:
  web:
    image: nginx
    ports:
      - "8080:80"
    depends_on:
      - db

  db:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: sample_db
      MYSQL_USER: sample_user
      MYSQL_PASSWORD: sample_pass
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Webサーバーとデータベースのように、いくつかのコンテナを組み合わせて動かすときは、Docker Composeを使います。上の内容をcompose.yamlという名前で保存し、同じフォルダで次のコマンドを実行します。

# まとめて起動する
docker compose up -d

# 動いているか確かめる
docker compose ps

# まとめて止めて、コンテナとネットワークを削除する
docker compose down

ファイル名はcompose.yamlが推奨で、docker-compose.ymlなどの古い名前も読み込まれます。古い記事によくあるversion: '3'の行は今は使われておらず、書くと「obsolete(古い)」という警告が出ます(公式「Version and name top-level elements」)。

docker compose downは、ボリューム(例のdb-data)を削除しません。データベースの中身も消したいときだけ、-vを付けます。例のパスワードは見本なので、実際に使うときは自分で決めた値に変えてください。

Dockerを使うときの注意点

メモリとCPUの使いすぎを防ぐ

docker run -d --memory 512m --cpus 1 --name web nginx

何も指定しないと、コンテナはホストのメモリやCPUを、使えるだけ使えます。--memoryでメモリ、--cpusでCPUの上限を決めておくと、1つのコンテナがホスト全体を重くするのを防げます(公式「Resource constraints」)。

イメージを小さくする

イメージが大きいと、ビルドやダウンロードに時間がかかります。ビルドに使う道具と、動かすときに要るものを分ける「マルチステージビルド」を使うと、最後のイメージを小さくできます(公式「Multi-stage builds」)。

権限とポートの公開に気をつける

  • dockerグループのユーザーは、rootと同じくらいの権限を持つ
  • ufwやfirewalldを使っていても、-pで公開したポートはそのルールを通らない
  • コンテナを削除すると、ボリュームに置いていないデータは消える

参考

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次