Docker 入門、Dockerのインストール、Dockerの基本操作

【概要】Dockerは実行環境をパッケージとして扱うコンテナ化技術である。イメージを基にコンテナを作成し、各コンテナは独立して動作する。データの永続化にはボリュームを使用し、コンテナ間の通信にはネットワークを使用する。Dockerfileに手順を記述してイメージをビルドでき、レイヤー構造により効率的な管理が可能である。

【この記事で学べること】Dockerの基本概念(コンテナ、イメージ、ボリューム、ネットワーク)、Docker Desktopのインストール方法(Windows、Ubuntu)、コンテナの作成・実行・停止・削除の基本操作、Dockerfileを使用したイメージの作成方法を習得できる。

【目次】

  1. コンテナ化
  2. Dockerエンジン
  3. Dockerイメージ
  4. イメージのレイヤー構造
  5. Dockerfile
  6. Dockerコンテナ
  7. Dockerボリューム
  8. Dockerネットワーク
  9. Docker Desktopのインストール、Dockerエンジンの起動(Windows上)
  10. Docker Desktopのインストール、Dockerエンジンの起動(Ubuntu上)
  11. Dockerの基本操作

サイト内の関連ページ

1. コンテナ化

コンテナ化(Containerization)は、アプリケーションとその実行環境(ライブラリ、設定ファイルなど)を単一のパッケージとして統合し、異なる環境でも一貫した動作を保証する技術である。Dockerによるコンテナ化には、以下の利点がある。

2. Dockerエンジン

Dockerエンジン(Docker Engine)は、Dockerコンテナの作成と実行を管理するソフトウェア基盤である。Dockerエンジンは、以下の2つの要素で構成される。

  1. Dockerデーモン(dockerd):コンテナのライフサイクル全体を管理するサーバープロセス
  2. Dockerクライアント(docker CLI):ユーザーのコマンドをDockerデーモンに伝達するコマンドラインインターフェース

3. Dockerイメージ

Dockerイメージとは、アプリケーションの実行環境を定義したパッケージであり、実行に必要なすべてのコンポーネント(ファイル、ライブラリ、依存関係)を含む。このイメージは、Dockerコンテナを生成するためのテンプレートとして機能する。

Dockerイメージのプル(取得)

docker pullコマンドは、Docker Hub(Dockerの公式イメージレジストリ)などから指定したイメージをダウンロードする。イメージを取得することで、そのイメージを基にコンテナを作成できるようになる。

次は、Ubuntu 24.04 LTS(Long Term Support:長期サポート版)のイメージを取得する例である。docker imagesコマンドにより、ローカル(手元のコンピュータ)に保存されているDockerイメージの一覧を表示する。


docker pull ubuntu:24.04
docker images

Dockerイメージのビルド(Dockerfileからのイメージ作成)

docker buildコマンドは、カレントディレクトリ(現在の作業ディレクトリ)のDockerfileを基にイメージを生成する。生成したイメージには、識別用の名前(例:myubuntu2404)とバージョン管理用のタグ(例:1.0)を設定できる。


docker build -t myubuntu2404:1.0 .
docker images

Dockerイメージの一覧表示

docker imagesコマンドにより、ローカルに保存されているDockerイメージの一覧を表示する。表示される情報には、各イメージのリポジトリ名、タグ、イメージID、作成日時、サイズが含まれる。イメージの詳細な構成情報を確認するには、docker image inspectコマンドにイメージIDを指定して実行する。


docker images

4. イメージのレイヤー構造

Dockerイメージは、複数のレイヤー(層)によって階層的に構成される。各レイヤーは、Dockerfileの個々のコマンド(FROM、RUN、COPYなど)の実行結果として生成される。

以下に、レイヤーが段階的に生成される具体例を示す。


FROM ubuntu:24.04          # ベースイメージのレイヤー
COPY ./app /app            # アプリケーションファイルのレイヤー
# システムパッケージのインストールのレイヤー
RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y python3 python3-pip python3-dev wget curl git cmake gnupg software-properties-common build-essential

# Miniconda3のインストールのレイヤー
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
    bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda && \
    rm Miniconda3-latest-Linux-x86_64.sh

# condaの初期設定とdev環境の作成のレイヤー
RUN /opt/conda/bin/conda init bash && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc

# コンテナ起動時のコマンド
CMD ["bash", "-c", ". /opt/conda/etc/profile.d/conda.sh && conda activate dev && \
     /opt/conda/envs/dev/bin/jupyter notebook --allow-root --ip=* --port=8888 --no-browser"]

レイヤー構造には、以下の利点がある。

5. Dockerfile

Dockerfileは、Dockerイメージを作成するための手順を定義したテキストファイルである。ベースイメージの選択、実行コマンドの設定、ファイルのコピー指示、その他の構築手順を記述する。Dockerfileを使用することで、イメージの作成手順を再現可能な形で管理できる。

以下に、Dockerfileの構成例を示す。

次のDockerfileは、Ubuntu 24.04 LTSのイメージを基にPython環境を構築する。Miniconda3を用いてPython 3.12環境を作成し、NumPy、Pandas等の科学技術計算ライブラリを導入する。Jupyter Notebookをポート8888で起動するよう設定し、開発用ツールとしてcmake、git等も導入する。


FROM ubuntu:24.04

# 環境変数の設定
ENV PATH=/opt/conda/bin:$PATH \
    SHELL=/bin/bash \
    DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Tokyo

# システムパッケージのインストール
RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y python3 python3-pip python3-dev wget curl git cmake gnupg software-properties-common build-essential

# Miniconda3のインストール
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
    bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda && \
    rm Miniconda3-latest-Linux-x86_64.sh

# condaの初期設定とdev環境の作成
RUN /opt/conda/bin/conda init bash && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc

RUN /opt/conda/bin/conda create -n dev python=3.12 -y && \
    /opt/conda/bin/conda install -n dev -y numpy pandas matplotlib scikit-learn jupyter pylint pytest black && \
    echo "conda activate dev" >> /root/.bashrc

# Jupyterの設定
RUN mkdir -p /root/.jupyter && \
    /opt/conda/envs/dev/bin/jupyter notebook --generate-config && \
    echo "c.NotebookApp.ip = '*'" >> /root/.jupyter/jupyter_notebook_config.py && \
    echo "c.NotebookApp.port = 8888" >> /root/.jupyter/jupyter_notebook_config.py && \
    echo "c.NotebookApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py

# 作業ディレクトリの設定
WORKDIR /workspace

# Jupyterのポートを公開
EXPOSE 8888

# コンテナ起動時のコマンド
CMD ["bash", "-c", ". /opt/conda/etc/profile.d/conda.sh && conda activate dev && \
     /opt/conda/envs/dev/bin/jupyter notebook --allow-root --ip=* --port=8888 --no-browser"]

6. Dockerコンテナ

Dockerコンテナは、Dockerイメージから生成される独立した実行環境である。各コンテナは、他のコンテナやホストシステムから分離され、独自のプロセス空間、ネットワーク環境、ファイルシステムを持つ。

コンテナの作成と実行

次のコマンドは、Ubuntu 24.04 LTSイメージを基に新しいコンテナを作成し、cat /etc/os-releaseコマンドを実行した後、自動的にコンテナを削除する。--rmオプションを指定することで、一時的な作業用コンテナが残らず、ディスク容量を節約できる。


docker run --rm ubuntu:24.04 cat /etc/os-release

次のコマンドは、Ubuntu 24.04 LTSのイメージを基に新しいコンテナを作成して実行する。-itオプションにより対話的な操作が可能になり、--nameオプションでコンテナに識別名を付与する。exitコマンドで接続を終了すると、コンテナは停止する。--rmオプションが指定されていないため、コンテナは停止後も保持される。


docker run --name ubuntu -it ubuntu:24.04 /bin/bash
exit

停止中のコンテナへの接続

docker startコマンドにより、停止中のコンテナを実行状態にする。docker execコマンドにより、実行中のコンテナに新しいプロセスとして接続する。exitコマンドで接続を終了しても、コンテナは停止せずに実行を継続する。


docker start ubuntu && docker exec -it ubuntu /bin/bash
exit

コンテナの一覧表示

docker psコマンドにより、コンテナの状態を確認できる。-aオプションを指定すると、停止中のコンテナも含めて表示する。


docker ps -a

7. Dockerボリューム

Dockerボリュームは、コンテナのライフサイクル(作成から削除まで)から独立してデータを永続的に保持する機能である。コンテナを削除してもボリューム内のデータは保持されるため、データベースファイルや設定ファイルなどの永続化に適している。また、複数のコンテナ間でボリュームを共有することで、コンテナ間でのデータ共有を実現する。

ボリュームの操作


# データ永続化用のボリュームを作成
docker volume create app-data
# 作成したボリュームをマウントしてコンテナを起動
docker run --rm -v app-data:/data ubuntu:24.04 ls -al /data

8. Dockerネットワーク

Dockerネットワークは、コンテナ間の通信を管理する機能である。複数のコンテナ間の通信や、コンテナとホストシステム間の通信を実現する。

ネットワークの種類

  1. bridgeネットワーク:標準のネットワークドライバであり、同一ホスト上のコンテナ間通信を実現する
  2. hostネットワーク:ホストシステムのネットワークスタックを直接使用する
  3. noneネットワーク:ネットワーク機能を無効化する
  4. overlayネットワーク:複数のDockerホスト間でのコンテナ通信を実現する

9. Docker Desktopのインストール、Dockerエンジンの起動(Windows上)

Docker Desktopにより、GUIを用いてDockerコンテナ、Dockerイメージ、Dockerボリュームの一覧表示、状態確認、基本的な操作を行うことができる。

Docker Desktopは、Windowsのスタートメニューから起動できる。Docker Desktopを起動すると、Dockerエンジンが起動する。

9.1 インストール

Dockerデーモンとクライアントを含むDocker Desktopのインストール手順を示す。

インストールは、以下の2つの方法から選択できる。

A)winget(Windowsパッケージマネージャー)を使用したインストール

  1. Windowsで、管理者権限コマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)。
  2. wingetが利用可能か確認する。
    
    winget --version
    
    wingetのバージョン確認画面
  3. Docker Desktopをインストールする。
    
    winget install --scope machine Docker.DockerDesktop
    

B)手動でのインストール

  1. Docker Desktopのダウンロード
    • 公式サイト(https://docs.docker.com/desktop/features/wsl/#download)にアクセスする
    • インストーラをダウンロードする
  2. インストールの実行
    • ダウンロードしたインストーラを実行する
    • 画面の指示に従ってインストールを完了する
  3. 自動起動の設定(任意)

    Windows起動時にDocker Desktopを自動的に起動したい場合は、以下の設定を行う。

    管理者権限コマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)。

    次のコマンドを実行する。

    
    reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Docker Desktop" /t REG_SZ /d "\"C:\Program Files\Docker\Docker\Docker Desktop.exe\"" /f
    

10. Docker Desktopのインストール、Dockerエンジンの起動(Ubuntu上)

10.1 事前準備:既存のDockerの削除(必要な場合)

Docker Desktopとの競合を防ぐため、既存のdocker-cedocker.ioがインストールされている場合は削除する。


sudo apt remove -y docker docker-engine docker.io containerd runc docker-ce docker-ce-cli
rm -r $HOME/.docker
sudo rm -f /usr/local/bin/com.docker.cli
sudo apt purge -y docker-desktop

10.2 HTTPSリポジトリ利用の設定

aptがHTTPSでリポジトリにアクセスできるようにするため、必要なパッケージをインストールする。


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

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

Dockerの公式GPGキー(パッケージの署名を検証するための暗号鍵)を追加し、Docker公式リポジトリを登録する。

参考ページ: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository


sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Dockerリポジトリの追加画面

10.4 Docker Engineのインストール


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

10.5 Docker Engineの動作確認

以下のコマンドを実行し、エラーメッセージが表示されないことを確認する。


sudo docker run hello-world
Docker Engineの動作確認画面

10.6 権限の設定と動作確認

現在のユーザーをdockerグループに追加することで、sudoなしでDockerコマンドを実行できるようになる。グループへの追加後は、一度ログアウトして再ログインする必要がある。


sudo usermod -aG docker $USER
docker run hello-world
docker --version
docker version
docker compose version
Docker権限設定の確認画面

10.7 Docker Desktopのインストール

参考ページ: https://docs.docker.com/desktop/setup/install/linux/ubuntu/


curl -LO https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb
sudo apt install -y ./docker-desktop-amd64.deb

10.8 Docker Desktopの起動と動作確認

以下のコマンドでDocker Desktopを起動する。


docker desktop version
docker desktop start
Docker Desktopの起動画面

10.9 Docker Engineの自動起動設定

システム起動時にDocker Engineを自動的に起動するよう設定する。


sudo systemctl unmask docker.service
sudo systemctl enable docker
sudo systemctl is-enabled docker

10.10 トラブルシューティング

11. Dockerの基本操作

イメージとコンテナに対するコマンド一覧

イメージ

コンテナ

イメージからのコンテナの作成、コンテナの開始・停止・削除、ローカルのイメージの確認

イメージの一覧表示画面

コンテナからイメージを作成

docker commitコマンドを使用すると、現在のコンテナの状態をイメージとして保存できる。手動でインストールや設定を行ったコンテナを、再利用可能なイメージとして保存する場合に有用である。ただし、再現性の観点からは、Dockerfileを使用したイメージ作成が推奨される。

  1. docker commitコマンドにより、コンテナからイメージを作成する

    コンテナIDは、docker ps -aで確認する。以下の実行例では、イメージ名としてmyubuntu2404:1.0を指定している。

    
    docker ps -a
    docker commit <コンテナID> myubuntu2404:1.0
    
    コンテナからイメージを作成する画面
  2. イメージが追加されたことを確認する
    
    docker images
    
    イメージが増えたことの確認画面
  3. 作成したイメージを使用してコンテナを作成し、起動する
    
    docker run -it myubuntu2404:1.0 /bin/bash
    exit
    
    作成したイメージからコンテナを起動する画面

Dockerfileを使用したイメージの生成

Dockerfileを使用することで、イメージの作成手順をコードとして管理でき、同じ環境を何度でも再現できる。チーム開発やCI/CD環境での利用に適している。

  1. 空のディレクトリを作成する
  2. そのディレクトリ内に、以下の内容でDockerfileを作成して保存する

    次のDockerfileは、Ubuntu 24.04 LTSのイメージを基にPython環境を構築する。Miniconda3を用いてPython 3.12環境を作成し、NumPy、Pandas等の科学技術計算ライブラリを導入する。Jupyter Notebookをポート8888で起動するよう設定し、開発用ツールとしてcmake、git等も導入する。

    
    FROM ubuntu:24.04
    
    # 環境変数の設定
    ENV PATH=/opt/conda/bin:$PATH \
        SHELL=/bin/bash \
        DEBIAN_FRONTEND=noninteractive \
        TZ=Asia/Tokyo
    
    # システムパッケージのインストール
    RUN apt-get update && apt-get upgrade -y && \
        apt-get install -y python3 python3-pip python3-dev wget curl git cmake gnupg software-properties-common build-essential && \
        rm -rf /var/lib/apt/lists/*
    
    # Miniconda3のインストール
    RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
        bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda && \
        rm Miniconda3-latest-Linux-x86_64.sh
    
    # condaの初期設定とdev環境の作成
    RUN /opt/conda/bin/conda init bash && \
        echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc
    
    RUN /opt/conda/bin/conda create -n dev python=3.12 -y && \
        /opt/conda/bin/conda install -n dev -y numpy pandas matplotlib scikit-learn jupyter pylint pytest black && \
        echo "conda activate dev" >> /root/.bashrc
    
    # Jupyterの設定
    RUN mkdir -p /root/.jupyter && \
        /opt/conda/envs/dev/bin/jupyter notebook --generate-config && \
        echo "c.NotebookApp.ip = '*'" >> /root/.jupyter/jupyter_notebook_config.py && \
        echo "c.NotebookApp.port = 8888" >> /root/.jupyter/jupyter_notebook_config.py && \
        echo "c.NotebookApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py
    
    # 作業ディレクトリの設定
    WORKDIR /workspace
    
    # Jupyterのポートを公開
    EXPOSE 8888
    
    # コンテナ起動時のコマンド
    CMD ["bash", "-c", ". /opt/conda/etc/profile.d/conda.sh && conda activate dev && \
         /opt/conda/envs/dev/bin/jupyter notebook --allow-root --ip=* --port=8888 --no-browser"]
    
  3. Dockerfileを基にイメージを作成する

    docker buildコマンドは、カレントディレクトリのDockerfileを基にイメージを生成する。作成したイメージには、識別用の名前(例:myubuntu2404)とバージョン管理用のタグ(例:1.0)を設定できる。

    docker imagesコマンドにより、ローカルに保存されたすべてのイメージを一覧形式で確認できる。

    
    docker build -t myubuntu2404:1.0 .
    docker images
    
  4. 作成したイメージからコンテナを作成して実行する
    
    docker run --name myubuntu -p 8888:8888 -it myubuntu2404 /bin/bash
    

未使用リソースの削除

Dockerを使用していると、未使用のイメージやコンテナがディスク容量を消費する。定期的に未使用リソースを削除することで、ディスク容量を確保できる。

リソース管理(Docker Desktopを使用)

Docker Desktopの設定で、WSL 2(Windows Subsystem for Linux 2:Windows上でLinuxを実行するための機能)に割り当てるリソースを管理できる。

メモリ使用量、ディスク容量の設定:Docker Desktop > Settings > Resources > WSL Integration

ローカルフォルダのマウント

ホストのフォルダをコンテナ内にマウントすることで、ホストとコンテナ間でファイルを共有できる。


docker run --rm -v %cd%/windows-file:/app ubuntu:24.04 ls /app

Docker上でサーバを起動し、ポートマッピングを行う(ホストはUbuntu)

  1. 前準備
    
    sudo apt update
    
  2. サーバの起動

    公式の「はじめよう」のページ(https://docs.docker.com/get-started/)に従い、サーバを起動する。

    次の操作では、ホストのポート3000をコンテナのポート80にマッピングしている。ローカルホストからのみアクセス可能にする場合は「127.0.0.1:3000:80」のように指定する。

    
    docker run -d -p 3000:80 docker/getting-started
    
  3. SSHでリモート接続する

    次の操作では、ホストのポート8022をコンテナのポート22にマッピングしている。

    
    docker run -p 8022:22 -it myubuntu2404:1.0 /bin/bash
    sudo adduser --uid 1234 --ingroup sudo --home /home/ai ai
    

Docker Composeの「はじめよう」を実行(ホストはUbuntu)

Docker Composeは、複数のコンテナで構成されるアプリケーションを定義・実行するためのツールである。Docker Composeの「はじめよう」のページ(https://docs.docker.com/compose/gettingstarted/)の手順に従って実行する。

  1. 前準備

    Docker Composeがインストールされていること。ここでは、Docker Desktopに同梱されているDocker Composeを使用する。

  2. プロジェクトディレクトリの作成
    
    mkdir composetest
    cd composetest
    
  3. プロジェクトディレクトリにapp.pyを作成する

    https://docs.docker.com/compose/gettingstarted/のapp.pyを使用する。

  4. プロジェクトディレクトリにrequirements.txtを作成する

    https://docs.docker.com/compose/gettingstarted/のrequirements.txtを使用する。

  5. プロジェクトディレクトリにDockerfileを作成する

    Dockerイメージの生成に使用する。app.pyが使用するソフトウェア(Python処理系など)が設定されている。

    https://docs.docker.com/compose/gettingstarted/のDockerfileを使用する。

  6. プロジェクトディレクトリにdocker-compose.ymlを作成する

    サービスの設定を記述する。

    https://docs.docker.com/compose/gettingstarted/のdocker-compose.ymlを使用する。

  7. docker compose upを実行してアプリケーションのビルドと実行を行う

    エラーメッセージが表示されないことを確認する。

    
    docker compose up
    
  8. ポート番号8000でWebサーバにアクセスし、結果を確認する
    
    curl http://localhost:8000