Dockerの基本を解説

目次

なぜDockerを使用するのか?

アプリケーションを1台または複数のサーバーにセットアップしてデプロイする作業は非常に大変です。アプリケーションに必要なツールや環境をインストールするところから始まり、アプリケーションを実行するまでの工程、さらには複数のサーバー間で環境が統一されていない問題もあります。このような理由から、この問題を解決するためにDockerが誕生しました。

Dockerって何?

1台のサーバー上で様々なアプリケーションを手軽に仮想化・実行できるようにするためのプラットフォームのこと。
Dockerコンテナと呼ばれるアプリケーションの実行環境を、1台のサーバー上に作成することができる。
Dockerコンテナを作成するための設計図であるDockerイメージを共有することで、他ユーザーでも簡単に同じ開発環境のDockerコンテナを使ってアプリケーションを実行できる。

Dockerのメリット

  • 仮想マシンとは異なり、Dockerは数秒で起動および停止が可能です。
  • 任意のシステムでコンテナを起動できます。
  • コンテナは仮想マシンよりも高速にビルドおよび削除できます。
  • 一度設定を行うだけで、依存関係を再インストールする必要がありません。別のマシンに移行する場合や、新しいメンバーがプロジェクトに参加する場合でも、その設定を共有すれば環境を簡単に構築できます。
  • 環境を削除しても他の部分に影響を与えることなく、クリーンな作業スペースを保てます。

Dockerの機能と用語説明

Dockerコンテナ

システムの他の部分に影響を与えることなく、アプリケーションを実行できる仮想空間のような隔離された環境で、すべてのコードと依存関係がパッケージ化されている。

Dockerイメージ

アプリケーションの実行に必要なソースコード、依存関係、ツールを含んだパッケージで、コンテナ作成時に指示を出す読み取り専用のファイル。

Dockerfile

Dockerイメージを構成するテキストデータで、Dockerfileを読み込むことでDockerイメージが構築される。

FROM gradle:7.4.1-jdk11 AS builder

WORKDIR /tmp

COPY ./src ./src

COPY ./build.gradle .

RUN gradle build

FROM openjdk:11.0.14.1-oracle

COPY --from=builder /tmp/build/libs/app.jar /app/app.jar

EXPOSE 8080
  • FROM: ベースイメージを指定します(例: python, ubuntu, alpineなど)。
  • LABEL: イメージにメタデータを提供します。メンテナー情報を追加する際に使用できます。イメージのラベルを確認するには、docker inspectコマンドを使用する。
  • ENV: 環境変数を設定する。
  • RUN: イメージのビルド時に実行するコマンドを指定します。パッケージのインストールなどに使用される。
  • COPY: ファイルやディレクトリをコンテナ内にコピーしする。
  • ADD: ファイルやディレクトリをコンテナ内にコピーします(COPYに似ていますが、圧縮ファイルを解凍したりリモートURLを扱う機能も持つ)。
  • CMD: コンテナが実行するコマンドと引数を指定します。この設定は上書き可能で、CMDは1つだけ設定できる。
  • WORKDIR: 他の命令(例: RUN, CMD, ENTRYPOINT, COPY, ADDなど)の作業ディレクトリを設定する。
  • ARG: イメージビルド時に使用される変数の値を定義する。
  • ENTRYPOINT: コンテナが実行するコマンドと引数を指定します。CMDと異なり、上書きされにくい。
  • EXPOSE: イメージがリッスンするポートを宣言する。
  • VOLUME: データのアクセスや保存のためのマウントポイントを作成する。

Docker Compose

複数のコンテナを1度に操作することができるツール。Docker Composeの設定ファイルであるdocker-compose.ymlファイルは複数のコンテナ間の関係や環境変数などを記述する。

version: "3"
services:
  spring-boot:
    build:
      context: ./web-spring2
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_started
    entrypoint: "java -jar /app/app.jar"
    networks:
      - app-net
  mysql:
    build:
      context: ./mysql
      dockerfile: Dockerfile
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/settings:/etc/mysql/conf.d/
      - ./mysql/data/:/var/lib/mysql/
    environment:
      MYSQL_DATABASE: study
      MYSQL_ROOT_PASSWORD: riku0456
    networks:
      - app-net
networks:
  app-net:
    driver: bridge

Docker Desktop

Windows・MacOS上でDocker環境を構築・利用するためのツールで、画面上でコンテナの停止や再開、廃止といった操作が可能。

Dockerコマンド(基本)

イメージ/コンテナをリストアップする

docker image/container ls

利用可能なコンテナをリストアップする

docker ps –a

特定のコンテナを停止する

docker stop <コンテナ名>

コンテナのログを確認する

docker logs <コンテナ名>

コンテナからイメージを構築する

docker build -t <コンテナ名>

コンテナを作成する(背景構築)

docker run -d <コンテナ名>

まとめ

この記事では、Dockerの基本について噛み砕いて説明してみました。
Dockerは開発環境を共有し、アプリケーションの実行をスムーズに行うための強力なツールなので、使えるとかなり便利ですね。