(最終更新月:2023年9月)
✔当記事はこんな方におすすめです
「Dockerってどう使うの?」
「Dockerの基本的な使い方を学びたい」
「Dockerを使った具体的な例を見たい」
✔当記事で解説すること
- Dockerの基本的な操作方法
- Dockerの利用方法とその応用
- Dockerの使用例を通じた理解深化
当記事では、Dockerの基本概念から、より具体的な実例に基づく使い方まで、詳細に解説していきます。
ぜひ最後までお読みいただき、Dockerの使い方をマスターしましょう。
dockerを使えるようになると、気軽にいろいろと試せます。
— ITC (@ITC202012) September 20, 2023
・Nginx
・Apache
・Node
・Django
・Python
好きにいじって、終わったらコンテナを削除するだけ。
とても簡単です。#docker #プログラミング初心者 pic.twitter.com/CgVzDLX923
Docker入門
こちらでは、Dockerについての基本をお伝えしていきます。
Dockerの役割やその特徴、そしてDockerを構成するエコシステム、そして基本的な用語についても触れていきます。
- Dockerの役割とは?
- コンテナ vs ハイパーバイザ型仮想化
- Dockerの機能とエコシステム
- Docker用語集と説明
Dockerの役割とは?
Dockerは、開発から運用までのライフサイクル全体をカバーするオープンソースのプラットフォームです。
その主な役割は、アプリケーションを「コンテナ」という隔離された環境で実行することで、一貫性と再現性を保つこと。
開発者はあらかじめ定義した環境でコードを書き、そのままの状態でどのマシンでも実行できます。
コンテナ vs ハイパーバイザ型仮想化
コンテナとハイパーバイザ型仮想化は、どちらもアプリケーションを隔離した環境で動作させる技術ですが、その実装方法に大きな違いがあります。
- ハイパーバイザ型仮想化:各VM(仮想マシン)が独立したOSを必要とする
- コンテナ:ホストのOSの一部を共有しながら、名前空間という仕組みを使い各コンテナを隔離
この結果、コンテナはより軽量で高速な実行を可能にします。
Dockerの機能とエコシステム
Dockerは、以下のような基本的なコンテナのライフサイクルを管理する機能を提供します。
- コンテナの作成
- 起動
- 停止
- 削除
Dockerは単なる技術ではなく、エコシステムとして成り立っています。
Docker Hubはその一部で、パブリックまたはプライベートなイメージを共有するための中央リポジトリを提供します。
Dockerで覚えておくべき主な用語
Dockerの学習にあたって必要な用語を見ていきましょう。
用語 | 説明 | 使用例 | 解説 記事 |
---|---|---|---|
Dockerfile | Dockerイメージを作成するためのスクリプト。 各命令は、イメージの新しいレイヤーを作成します。 | FROM ubuntu:20.04 | Dockerfileの書き方 |
Image | コンテナを実行するための静的なスナップショット。 アプリケーション、依存関係、ランタイムを含むことができます。 | docker pull nginx | Dockerイメージの基本 |
Container | Dockerイメージからインスタンス化された実行環境。 | docker run nginx | Docker Containerについて |
DockerHub | Dockerイメージを公開・共有するためのクラウドベースのレジストリサービス。 | docker push username/image-name | DockerHubとは? |
Volume | ホストとコンテナ間でデータを永続的に保存・共有するためのメカニズム。 | docker volume create myvolume | Dockerボリュームの基本 |
Port Mapping | ホストのポートとコンテナのポートを関連付けること。 | docker run -p 8080:80 nginx | |
Docker Compose | 複数のコンテナを定義・実行するためのツール。 YAMLファイルでサービスを定義します。 | docker-compose up | Docker Composeの基本 |
Docker Swarm | Dockerのネイティブなクラスタリングとオーケストレーションツール。 | docker swarm init | |
Layer | Dockerイメージは複数のレイヤーで構成されています。 各レイヤーはDockerfileの命令ごとに作成されます。 | Dockerfile内のRUN , COPY などの命令で新しいレイヤーが作成される。 | |
Registry | Dockerイメージを保存するためのサービス。 Docker Hubは最も有名なレジストリの一つです。 | docker push registry-url/image-name |
この一覧はDockerの基本的な用語をカバーしていますが、Dockerのエコシステムは非常に広大であり、多くの高度な機能やツールが存在します。
Dockerの強み
こちらでは、Dockerの主要な利点、とくにコードによるインフラ管理(Infrastructure as Code:IaC)とイミュータブル・インフラについてお伝えします。
これらの理解を深めることで、Dockerの真価を理解する手助けとなるでしょう。
- コードによるインフラ管理(IaC)
- イミュータブル・インフラ
コードによるインフラ管理(IaC)
Dockerは、コードによるインフラ管理(IaC)を実現します。
IaCとは、インフラ環境をコードで定義し、そのコードを通じてインフラのプロビジョニングと管理をおこなうアプローチのこと。
Dockerでは、Dockerfileというファイルでアプリケーションとその依存環境をコード化します。
例えば、以下は簡単なPythonアプリケーションのDockerfileの一例です。
# Pythonの公式イメージから
FROM python:3.7
# ワーキングディレクトリを設定
WORKDIR /app
# 必要なパッケージをコピー
COPY requirements.txt .
# パッケージをインストール
RUN pip install -r requirements.txt
# アプリケーションをコピー
COPY . .
# アプリケーションを起動
CMD ["python", "app.py"]
このDockerfileは、コンテナ内でPythonアプリケーションを動作させるための環境を完全にコード化しています。
イミュータブル・インフラ
イミュータブル・インフラは、一度デプロイされたらその状態を変更しないという考え方です。
新しいバージョンのアプリケーションをデプロイする際は、新しいイメージを作成し、新しいコンテナとしてデプロイします。
一貫性と再現性が保たれ、環境の変更による予期しない問題を避けられます。
新しいバージョンのアプリケーションをデプロイする場合は以下のコマンドです。
# 新しいバージョンのイメージを作成
docker build -t my-app:v2 .
# 新しいバージョンのコンテナをデプロイ
docker run -d -p 8080:8080 my-app:v2
このイメージはイミュータブルで、新しいバージョンのアプリケーションは新しいコンテナとしてデプロイされます。
これにより、開発と運用の間で環境の差異が生じることを防ぎます。
Dockerのインストールガイド
こちらでは、Dockerのインストール方法について詳しく説明します。
適切な方法でDockerをインストールすることが、その後の活用の第一歩となります。
- Macでのインストール方法
- Windowsでのインストール方法
- Linuxでのインストール方法
詳しくはこちらでも解説しています。
Macでのインストール方法
MacでDockerをインストールするには、Docker Desktop for Macを利用します。
以下のコマンドを実行するか、直接Webサイトからダウンロードしてインストールしてください。
# Homebrewがインストールされていることを確認
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# Dockerのインストール
brew cask install docker
インストールが完了したら、Applications
フォルダからDockerを開き、起動します。
Windowsでのインストール方法
WindowsでDockerを利用するには、Docker Desktop for Windowsを利用します。
公式サイトからインストーラーをダウンロードし、指示に従ってインストールしましょう。
ただし、Docker Desktopを利用するためには、WindowsのバージョンがProまたはEnterpriseで、かつHyper-VとContainersが有効化されている必要があります。
WindowsのPowerShellを開き、以下のコマンドを実行。
Hyper-VとContainersが有効かどうか確認してください。
# Hyper-VとContainersが有効化されているか確認
Get-WindowsOptionalFeature -Online | ? FeatureName -match 'Hyper-V' | ft
Get-WindowsOptionalFeature -Online | ? FeatureName -match 'Containers' | ft
必要であれば、以下のコマンドを利用してHyper-VとContainersを有効化します。
# Hyper-VとContainersの有効化
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
これらの手順を経て、Docker Desktop for Windowsをインストールし、起動します。
Linuxでのインストール方法
Linuxでは、Docker EngineとDocker Composeを個別にインストールすることがおすすめです。
なぜならLinuxでもDocker Desktopは使えますが、未だベータ版だから。(2023年8月時点)
詳しくは以下の記事を参考にしてください。
Docker実行チェック
インストールが完了したら、Dockerが正しく動作するかを確認しましょう。
インストールが正しく完了したかを確認するために、以下のコマンドをターミナルまたはコマンドプロンプトに入力してください。
docker --version
出力が正しく表示されれば、Dockerは正しくインストールされ、動作していると言えます。
以下は例です。
Docker version 24.0.5, build ced0996
次に、Dockerが正常に動作していることを確認するために以下のコマンドを実行しましょう。
docker run hello-world
このコマンドは、Dockerが公式に提供しているhello-world
イメージを取得し、新しいコンテナを作成して実行します。
出力として「Hello from Docker!」などのメッセージが表示されれば、Dockerは正しく動作しています。
もしエラーが発生した場合は、再度インストール手順を確認し、問題を解決してください。
Docker基本操作:コンテナとイメージ
Dockerの稼働を確認したら、次に基本的な操作を学びましょう。
これらの基本操作をマスターすることで、Dockerの世界が一段と広がります。
- 「hello-world」イメージの取得と解説
- コンテナの作成と起動
「hello-world」イメージの取得と解説
先程稼働確認のために使ったhello-world
イメージは、最もシンプルなDockerイメージのひとつです。
以下のコマンドで再度取得してみましょう。
docker pull hello-world
このコマンドはDockerの公式イメージをDocker Hubから取得するもの。
pullコマンドについてはこちらで詳しく解説しています。
取得したイメージは、ローカルのDockerイメージリポジトリに保存されます。
取得したイメージの一覧は以下のコマンドで確認しましょう。
docker images
このコマンドを実行すると、hello-world
イメージを含む、すべてのローカルに存在するDockerイメージが一覧表示されます。
コンテナの作成と起動
Dockerイメージから新たなコンテナを作成するにはrun
コマンドを使用します。
以下のコマンドを使ってhello-world
イメージから新たなコンテナを作成し、起動してみましょう。
docker run hello-world
このコマンドを実行すると以下がおこなわれます。
- Dockerはローカルに
hello-world
イメージが存在するかを確認 - 存在しなければ、自動的にDocker Hubからイメージを取得
- そして新たなコンテナを作成し、起動
起動中のコンテナの一覧は以下のコマンドで確認できます。
docker ps
これらのコマンドを覚えておくことで、Dockerの基本的な操作ができるようになります。
イメージ、コンテナ作業、コマンド理解
Dockerの基本操作を理解したら、コンテナの操作方法をお伝えしていきます。
この章を通して、Dockerをもっと深く理解できるでしょう。
- コンテナ内操作
- コンテナの停止
- コンテナからイメージ作成
- コンテナとイメージの削除
コンテナ内操作
Dockerコンテナの内部に入り、直接コマンドを実行することも可能です。
その際にはexec
コマンドを使用しましょう。
以下の例では、動作中のcontainer_id
というコンテナにbashシェルを開くためのコマンドを示しています。
docker exec -it container_id /bin/bash
コンテナの停止
起動中のDockerコンテナを停止するにはstop
コマンドを使用します。
以下のコマンドはcontainer_id
というコンテナを停止するものです。
docker stop container_id
コンテナからイメージ作成
既存のコンテナから、新しいDockerイメージを作成することも可能です。
その際にはcommit
コマンドを使用します。
以下は、container_id
というコンテナからnew_image_name
という名前の新しいイメージを作成するものです。
docker commit container_id new_image_name
コンテナとイメージの削除
不要になったコンテナやイメージは削除できます。
コンテナを削除するにはrm
コマンド、イメージを削除するにはrmi
コマンドを使用しましょう。
docker container rm container_id
docker rmi image_id
これらのコマンドを理解し、使えるようになることで、Dockerの操作により自由度と効率性が加わります。
コンテナ運用技術
Dockerコンテナをうまく管理するためには、特権モードや名前付きボリュームなどのコンテナ運用技術を知ることが重要です。
- 特権モード
- 名前付きボリューム
特権モード
特権モードとは、コンテナ内からホストマシンのリソースに直接アクセスできるようにするモードです。
このモードは、コンテナ内のプロセスがホストマシン上で完全なシステムアクセス権を持つため、セキュリティ上のリスクも伴います。
以下は、特権モードでコンテナを実行する例です。
docker run --privileged -it ubuntu /bin/bash
名前付きボリューム
Dockerの名前付きボリュームは、コンテナ間でデータを共有したり、データを永続化したりするためのものです。
名前付きボリュームは以下のコマンドで作成できます。
docker volume create myvolume
Volumeについてはこちらの記事もご覧ください。
そして、コンテナを起動する際にボリュームをマウントすることで、コンテナからボリュームにアクセスできます。
docker run -v myvolume:/data ubuntu
これらの技術を理解し、使えるようになることで、より複雑なDockerの運用が可能です。
Dockerコマンドの省略形と完全形
Dockerコマンドには長い形式と短い形式があります。
例えば、以下の2つは同じコマンドです。
docker ps
docker container ls
前者が省略形、後者が完全形です。
省略形はより短く、タイプしやすいですが、完全形の方が直感的で理解しやすいです。
どちらを使うかは好みや状況によるでしょう。
まとめ
当記事では、Dockerの基本的な役割からコマンド、運用技術について学習してきました。
- Dockerは、コードを実行するための環境をコンテナとしてパッケージ化するツール
- 開発環境から本番環境まで、どの環境でも同じ動作をすることを保証できる
- ハイパーバイザ型仮想化とは異なり、リソースのオーバーヘッドが少なく、起動が速いのが特徴
Dockerコマンドは、コンテナの作成、起動、停止、削除などをおこなうために使用します。
基本的な操作のためのコマンドは以下のとおりです。
docker run
:コンテナを作成し、起動します。docker ps
:稼働中のコンテナを一覧表示します。docker stop
:コンテナを停止します。docker rm
:コンテナを削除します。
Dockerは、開発環境の統一、微サービスアーキテクチャの実装、CI/CDパイプラインの構築など、さまざまなシーンで活用できます。
特権モードや名前付きボリュームなどの運用技術を使うことで、さらに柔軟な運用が可能です。
ぜひこの知識を活用し、Dockerの可能性を最大限に引き出してください。