DockerとDocker-Composeとは?ざっくり概念をまとめてみた

開発業務でDockerを使っているのですが、イマイチ何なのかを理解しておらずこれから先のことを考えると危ないので自分なりに腑に落ちるまで勉強しました。

ざっくりと概念をまとめて後から見返せるようにメモ。

※Dockerのメリットデメリットとか、そう言うのは書いていません。どんなものなのかの概念だけです。

Dockerとは

仮想環境を簡単に立ち上げてくれるもの。

仮想環境とは、自分のPCにはない別の環境のこと。

例えば、自分のPHPのバージョンが6で、会社の業務で使うバージョンが7だった場合、仮想環境を使うことで簡単にバージョン7を使うことができる。本来であれば面倒な環境構築の作業をする必要があるが、仮想環境を使うことで簡単に構築できるし、MacユーザーがWindows専用アプリを使いたい時も仮想環境が役に立つ。

しかもみんなが同じ仮想環境を共有できる。

とにかく、Dockerとは仮想環境のことで、サクッと開発環境を準備できる便利なやつ。

Dockerは船のコンテナ

よくネットでイメージされるのが船のコンテナ。

船のコンテナに環境を積んで置くことで誰でもそれを降ろして利用することができる。また、環境を変えたいときはコンテナを降ろして、また新しいコンテナを積めばいい。

例えば、PG言語をPHPからJavaに変更したいときは、コンテナからPHPを降ろしてJavaを積んであげるだけでOK。

Docker-Composeとは

複数のコンテナを定義して、操作するためのツール。

例えば、コンテナ内でサーバーやDB、PG言語を定義したとき、その環境を用意してくれるのがDocker-Compose。Docker-Composeを使うことで初めてDockerの恩恵を受けることができる。

というより、Docker-Composeを使わないとDockerの意味がない?今はそういう認識です。

実際にDocker-Composeを定義しているのが、「docker-compose.yml」ファイル。

version: "3.9"

volumes:
  php-fpm-socket:
  db-store:

services:
  app:
    build:
      context: .
      dockerfile: ./infra/php/Dockerfile
    volumes:
      - php-fpm-socket:/var/run/php-fpm
      - ./laravel:/work/laravel
  web:
    build:
      context: .
      dockerfile: ./infra/nginx/Dockerfile
    ports:
      - 8080:80
    volumes:
      - php-fpm-socket:/var/run/php-fpm
      - ./laravel:/work/laravel
  db:
    build:
      context: .
      dockerfile: ./infra/mysql/Dockerfile
    ports:
      - 3306:3306
    volumes:
      - db-store:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=database
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - MYSQL_ROOT_PASSWORD=password
      - TZ=Asia/Tokyo

青色文字のapp,web,dbについて、これらがビルドされ、コンテナが作成、起動する仕組みです。

赤文字のdockerfileについて、ここで指定されたファイルに各app,web,dbの環境(バージョン等)を定義します。

ここでようやく、Dockerについて理解が深まった気がしました。ここでファイルを指定し、それを読み込んで実行することで環境が用意できる。docker-compose.ymlファイルを今まで意識していなかったけど、このファイルがDockerを使う上で結構重要な存在と知りました。

このファイルがあれば、dockerfileに定義された環境をみんなが使うことができる。少し環境を変えたいときはこのファイルを変更してみんなに配ればOK。

Docker-composeコマンドについて

以下の順番でコマンドを実行すると、docker-compose.ymlに記述されている内容が実行され仮想環境が用意できます。

●コンテナを作成
docker compose build –no-cache –force-rm

●コンテナを稼働
docker compose up -d

●Laravelの各種パッケージをインストール
docker compose exec app composer update

●Node.js をインストール(Node.jsの各種パッケージもインストール)
docker compose exec web npm install

※npmをアップグレード
docker compose exec web npm install -g npm@8.9.0

●アプリケーションキーを生成
docker compose exec app php artisan key:generate

●DBテーブル作成とDBデータ登録(マイグレーションとフレッシュ)
docker compose exec app php artisan migrate:fresh –seed

●アセットファイルをコンパイル
docker compose exec web npm run dev

まとめ

Dockerは仮想環境のことで簡単に開発環境を準備できる。そのDockerを利用するためにDocker-Composeを使う。Docker-Composeは「docker-compose.yml」ファイルに定義されており、そのファイルを実行するにはDocker-Composeコマンドを実行する必要がある。

参考文献

この記事を書いた人

アイティーエス株式会社

群馬県前橋市にあるアイティーエスは、アプリケーションの開発に核を置きながら、安定したネットワークの構築、業務コンサルティングから業務分析、設計、運用管理までの一貫したビジネスモデルを確立いたします。お問い合わせはこちら