Dockerは、アプリケーションをコンテナという単位でパッケージ化・実行するプラットフォームです。
従来の仮想マシン(VM)と異なり、ホストOSのカーネルを共有するため起動が数秒と高速・軽量で利用することができます。
Dockerは、オープンソースで提供されているため、無料で利用することができます。
Dockerの概要と使い方を紹介します
- Dockerの概要
- Dockerの使い方
- Docker Composeの概要
- Docker Composeの使い方
Dockerの概要
Dockerは、アプリケーションをコンテナという単位でパッケージ化・実行するプラットフォームです。
従来の仮想マシン(VM)と異なり、ホストOSのカーネルを共有するため起動が数秒と高速・軽量で利用することができます。
Dockerは、オープンソースで提供されているため、無料で利用することができます。
Dockerが解決する問題
今までは、以下のような課題がありました。
- 自分のPCでは動くのに、本番環境では動かない
- チームメンバーのPCで環境構築したら、バージョンが違ってエラーになった
- 開発・テスト・本番でOSやライブラリのバージョンがバラバラ
これらはすべて「環境差異」が原因です。
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-releaseDockerの公式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.gpgDockerの公式リポジトリを追加
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/nullDockerをインストール
Dockerをインストールします。
コマンドライン
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-pluginユーザーを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権限付与を読み込む
ログアウトと再ログインを行って、権限付与を読み込みます。
コマンドライン
rebootインストールを確認
インストールを確認します。
コマンド実行例
docker --version
docker compose versionコマンド実行例
$ docker --version
Docker version 29.4.0, build 9d7ad9f
$ docker compose version
Docker Compose version v5.1.1dockerコマンドの使い方
dockerコマンドの使い方を紹介します。
イメージを取得する
イメージを取得します。
コマンドライン
docker pull nginxコンテナを起動する
ポートとホストを指定して、コンテナを起動します。
コマンドライン
docker run -p 8080:80 nginx起動中のコンテナ一覧を表示
起動中のコンテナ一覧を表示します。
コマンドライン
docker psコンテナを停止する
コンテナを停止します。
コマンドライン
docker stop [コンテナID]コンテナを削除する
コンテナを削除します。
コマンドライン
docker rm [コンテナID]イメージ一覧を表示
イメージ一覧を表示します。
コマンドライン
docker imagesDocker 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 | 起動するコンテナの定義 |
| build | Dockerfile のあるディレクトリを指定 |
| 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 app npx prisma migrate deployコンテナを再ビルドして起動
コンテナを再ビルドして起動します。
コマンドライン
docker compose up -d --buildトラブルシューティング
トラブルシューティングを紹介します。
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
rebootconfigファイルなしエラー
configファイルなしエラーの解決方法を紹介します。
エラー事象
$ docker compose run --rm dev pytest tests
no configuration file provided: not foundまとめ
Dockerの概要と使い方を紹介しました。
- どの環境でも同じように動く仕組み
- 仮想マシン(VM)より高速で動作する
- コマンドで実行できる
- docker-compose.ymlでチーム全員が同じ環境を共有できる
コンテナは、開発環境を共有するための仕組みの1つです。
docker-compose.ymlを追加して、開発環境をコンテナ化してみるところから始めてみると良いです。
