MENU
やすひら
やすひらと申します。
長靴を履いたタヌキ(ITエンジニア)です。
モノ作りの楽しさを発信中。
X(旧Twitter)のフォローもお願いします。

[初心者向け]Dockerとは?基本概念とDocker Composeでの開発環境の構築方法

Dockerは、アプリケーションをコンテナという単位でパッケージ化・実行するプラットフォームです。
従来の仮想マシン(VM)と異なり、ホストOSのカーネルを共有するため起動が数秒と高速・軽量で利用することができます。
Dockerは、オープンソースで提供されているため、無料で利用することができます。

やすひら

Dockerの概要と使い方を紹介します

この記事でわかること
  • Dockerの概要
  • Dockerの使い方
  • Docker Composeの概要
  • Docker Composeの使い方
目次

Dockerの概要

Dockerは、アプリケーションをコンテナという単位でパッケージ化・実行するプラットフォームです。
従来の仮想マシン(VM)と異なり、ホストOSのカーネルを共有するため起動が数秒と高速・軽量で利用することができます。
Dockerは、オープンソースで提供されているため、無料で利用することができます。

Dockerが解決する問題

今までは、以下のような課題がありました。

  • 自分のPCでは動くのに、本番環境では動かない
  • チームメンバーのPCで環境構築したら、バージョンが違ってエラーになった
  • 開発・テスト・本番でOSやライブラリのバージョンがバラバラ

これらはすべて「環境差異」が原因です。
Dockerはこの問題を解決することができます。

Dockerを使うと、アプリケーションの実行に必要なもの(コード/ライブラリ/設定ファイル等)をコンテナという単位にまとめることができます。
コンテナはどの環境でも同じように動作するため、環境差異の問題が解消されます。

仮想マシンとの違い

仮想マシン(VM)でも同じことできますが、仕組みが異なります。
仮想マシンは、ハードウェアをエミュレートして完全なOSを内包します。
そのためリソース消費が大きく、起動に数分かかることもあります。

Dockerコンテナは、ホストマシンのOSカーネルを共有し、アプリケーションの実行に必要な部分だけを隔離します。
そのため軽量で、数秒で起動することができます。

項目Docker仮想マシン
起動時間数秒数分
リソース消費少ない多い

基本概念

Dockerを使う際に必要な概念を紹介します。

イメージ

コンテナの元になるテンプレートです。
イメージをビルドすることで、コンテナを利用することができます。

Dockerfileというファイルには、以下の内容を記述します。

  • どのOSを使うか
  • 何をインストールするか
  • どのコマンドを実行するか

イメージは読み取り専用で、一度作成すれば何度でも同じコンテナを再現できます。

コンテナ

イメージから起動した実行インスタンスです。
1つのイメージから複数のコンテナを起動することもできます。
コンテナは起動/停止/削除を実行することができます。

Docker Hub

Dockerの公式イメージレジストリです。
node/postgres/nginxなど、多くの公式イメージが公開されています。
docker pullコマンドで取得することができます。

Dockerのインストール

Dockerの公式リポジトリを追加して、最新版をインストールします。

Dockerインストールに必要なパッケージをインストール

Dockerインストールに必要なパッケージをインストールします。

コマンドライン

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

Dockerインストールに必要なパッケージをインストールします。

Dockerの公式GPGキーを追加

Dockerの公式GPGキーを追加します。

コマンドライン

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Dockerの公式GPGキーを追加します。

Dockerの公式リポジトリを追加

Dockerの公式リポジトリを追加する。

コマンドライン

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockerの公式リポジトリを追加します。

Dockerをインストール

Dockerをインストールします。

コマンドライン

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Dockerをインストールします。

ユーザーをdockerグループに追加

sudoなしで実行できるようにユーザーをdockerグループに追加します。

コマンドライン

sudo usermod -aG docker $USER
getent group | grep docker

コマンド実行例

$ sudo usermod -aG docker $USER
$ getent group | grep docker
docker:x:999:user

dockerグループにユーザーを追加します。

権限付与を読み込む

ログアウトと再ログインを行って、権限付与を読み込みます。

コマンドライン

reboot

上記は一例ですが、rebootコマンドで再起動して権限付与を読み込みます。

インストールを確認

インストールを確認します。

コマンド実行例

docker --version
docker compose version

コマンド実行例

$ docker --version
Docker version 29.4.0, build 9d7ad9f
$ docker compose version
Docker Compose version v5.1.1

sudoなしでdockerコマンドが実行できることを確認します。

dockerコマンドの使い方

dockerコマンドの使い方を紹介します。

イメージを取得する

イメージを取得します。

コマンドライン

docker pull nginx

イメージを取得します。

コンテナを起動する

ポートとホストを指定して、コンテナを起動します。

コマンドライン

docker run -p 8080:80 nginx

ポートとホストを指定して、コンテナを起動します。

起動中のコンテナ一覧を表示

起動中のコンテナ一覧を表示します。

コマンドライン

docker ps

起動中のコンテナ一覧を表示します。

コンテナを停止する

コンテナを停止します。

コマンドライン

docker stop [コンテナID]

コンテナを停止します。

コンテナを削除する

コンテナを削除します。

コマンドライン

docker rm [コンテナID]

コンテナを削除します。

イメージ一覧を表示

イメージ一覧を表示します。

コマンドライン

docker images

イメージ一覧を表示します。

Docker Composeで開発環境を構築

Docker Composeで開発環境を構築する方法を紹介します。

Docker Composeとは

実際の開発では、Webサーバーとデータベースなど、コンテナを組み合わせて使うことが多いです。
それぞれを個別にdocker runで管理するのは面倒です。

Docker Composeは、複数のコンテナをまとめて定義・管理するツールです。
docker-compose.ymlというYAMLファイルに構成を書くことで、コマンド1つで複数コンテナを一括で起動/停止できます。

docker-compose.ymlの書き方

docker-compose.ymlの書き方を紹介します。

以下は、Node.jsのWebアプリとPostgreSQLを組み合わせた構成例です。

設定ファイル

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://user:password@db:5432/mydb
    depends_on:
      - db
    volumes:
      - .:/app
      - /app/node_modules

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
項目説明
services起動するコンテナの定義
buildDockerfile のあるディレクトリを指定
image使用するDockerイメージを指定
portsホスト:コンテナ の形式でポートをマッピング
environment環境変数を設定
depends_on起動順序の依存関係を定義
volumesデータを永続化するためのボリューム設定

docker composeのコマンドの使い方

docker composeのコマンドの使い方を紹介します。

コンテナをビルド

コンテナをビルドします。

コマンドライン

docker compose build

コンテナのイメージをビルドします。

コンテナをバックグラウンドで起動

コンテナをバックグラウンドで起動します。

コマンドライン

docker compose up -d

コンテナのイメージをビルドして、バックグラウンドで起動します。

ログを確認する

ログを確認します。

コマンドライン

docker compose logs -f

ログを確認します。

コンテナを停止/削除する

コンテナを停止/削除します。

コマンドライン

docker compose down

コンテナを停止/削除します。

特定のサービスのコンテナ内でコマンドを実行

特定のサービスのコンテナ内でコマンドを実行します。

コマンドライン

docker compose run --rm app bash

docker compose run –rmは、常駐させずに1回だけコマンドを実行したいときに便利です。
–rmをつけることで実行後にコンテナが自動削除され、不要なコンテナが溜まりません。

マイグレーションの実行

マイグレーションを実行します。

コマンドライン

docker compose run --rm app npx prisma migrate deploy

docker compose run –rmは、常駐させずに1回だけコマンドを実行したいときに便利です。
–rmをつけることで実行後にコンテナが自動削除され、不要なコンテナが溜まりません。

コンテナを再ビルドして起動

コンテナを再ビルドして起動します。

コマンドライン

docker compose up -d --build

コンテナを再ビルドして起動します。

Dockerfileを変更した後は、コンテナを再ビルドして起動する必要があります。

トラブルシューティング

トラブルシューティングを紹介します。

dockerの権限エラー

docker実行時に権限エラーの解決方法を紹介します。

エラー事象

$ docker compose run --rm dev pytest tests
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock

コマンドライン

sudo usermod -aG docker $USER
reboot

usermodコマンド実行後に、ログアウトと再ログインが必要です。
権限を付与することで、権限エラーが解消されます。

configファイルなしエラー

configファイルなしエラーの解決方法を紹介します。

エラー事象

$ docker compose run --rm dev pytest tests    
no configuration file provided: not found

カレントディrクトリにcompose.yamlが存在しないため、エラーが発生しています。
compose.yamlがあるディレクトリに移動して、dockerを起動する必要があります。

まとめ

Dockerの概要と使い方を紹介しました。

Dockerは
  • どの環境でも同じように動く仕組み
  • 仮想マシン(VM)より高速で動作する
  • コマンドで実行できる
  • docker-compose.ymlでチーム全員が同じ環境を共有できる

コンテナは、開発環境を共有するための仕組みの1つです。
docker-compose.ymlを追加して、開発環境をコンテナ化してみるところから始めてみると良いです。

  • URLをコピーしました!
目次