よく使うdocker-composeコマンド

Dockerのキモとなる部分『docker-compose』とビルドについてまとめました。

Docker Composeとは

複数コンテナの管理を自動化する機能の事です。yamlファイルに、対象とするコンテナやプロパティなどを定義してコード化できるため、保守性の高い管理ができるようになります。

よく使うコマンド

コマンド内容
docker-compose configコマンド実行時の
カレントフォルダにあるyamlファイルの内容を表示
docker-compose up [オプション]コマンド実行時の
カレントフォルダにあるyamlファイルに定義した構成で
下記を一括実行
 1.イメージのダウンロード
 2.コンテナの作成
 3.コンテナの起動
※『–no-start』とすると3.は実施しない
docker-compose ps
docker-compose ps -a
-aなし:起動中のコンテナを一覧表示
-aあり:全てのコンテナを一覧表示
docker-compose imagesローカルのDockerイメージを一覧表示
docker-compose exec [サービス名] bash or sh指定したサービスのコンテナにターミナル接続
docker-compose stopyamlファイルに沿ってコンテナを一括停止
docker-compose startyamlファイルに沿ってコンテナを一括起動
docker-compose rmyamlファイルに沿ってコンテナを一括削除
docker-compose down –rmi all –volumes –remove-orphansupと逆順で全てのコンテナやイメージを一括削除

サンプル

一部のコマンドだけですが、使用例をまとめました。
以下は、『UbuntuにWordPressを構築する』流れになります。
WordPressは以下2つのコンテナで構築できるため、これらをDocker Composeでまとめる形になります。
 ・DBサーバー(MySQL) 
 ・Webサーバー(Apache + PHP)

yamlファイルの作成

yamlファイルのフォーマットVersion確認

yamlファイルのフォーマットVersionを決めるため、公式ドキュメントで確認します。
執筆時はv3.8が最新のようだったので、Dockerが対応しているバージョンか確認します。

sudo docker version

大丈夫そうです。

WordPressとMySQLの推奨環境確認

WordPressの公式サイト(日本語)で推奨環境を確認します。

よって、Dockerイメージは下記の組み合わせでダウンロードできるようにyamlファイルに記述します。(後述)

  • WordPressイメージのPHPバージョンが7.4以上
  • MySQLイメージのバージョンが5.7以上

※MySQLには現在、大きく分けて8.0系と5.7系があり、性能的には8.0系の方が良かったりしますが
 WordPressに8.0系を使う場合、当ページの本題から外れた対応が必要になるため
 ここでは5.7系を使用します。

Dockerイメージのバージョン確認(WordPress)

Docker Hubからダウンロード可能なWordPressバージョンを確認します。

Dockerイメージのバージョン確認(MySQL)

Docker Hubからダウンロード可能なMySQLバージョンを確認します。

yamlファイルに構成情報をまとめる

まずはyamlファイルを格納するフォルダを用意します。

mkdir /home/[ユーザー名]/wordpress
cd /home/[ユーザー名]/wordpress

yamlファイルに構成情報を書き込みます。

vim docker-compose.yaml
# docker-compose.yamlの内容

version: "3.8"

# 各コンテナの定義
services:
  # DBサーバー
  db:
    image: mysql:5.7
    volumes:
      - volume_mysql:/var/lib/mysql # DockerボリュームにDBのデータを残す(名前付きボリュームとして永続化)
    restart: always # 実行時に再起動
    environment:
      MYSQL_ROOT_PASSWORD: passrt1
      MYSQL_DATABASE: wp-db-sample
      MYSQL_USER: admin
      MYSQL_PASSWORD: passad1
  # WordPress(Apache + PHP)
  wordpress:
    depends_on:
      - db # wordpressより先にdbを起動
    image: wordpress:latest
    ports:
      - "8000:80" # ホスト側ポート8000とコンテナ側ポート80を接続
    volumes:
      - ./wordpress:/var/www/html # wordpressディレクトリにwordpressのデータを残す(ディレクトリとして永続化)
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: admin
      WORDPRESS_DB_PASSWORD: passad1
      WORDPRESS_DB_NAME: wp-db-sample
volumes:
  volume_mysql: # /var/lib/docker/volumes/ に名前付きボリュームを作成(docker volume lsで確認できる)

yamlファイルを元に各コンテナを起動

起動

docker-compose up -d

起動したことを確認

docker-compose ps -a

各コンテナが起動していることを確認できました。

WordPressが動作することを確認

# 仮想環境に作成した場合
http://[仮想環境のIPアドレス]:8000/
# ホストPCに作成した場合
http://localhost:8000/

WordPressが正常に動作していることが確認できました。