LoginSignup
0
0

More than 3 years have passed since last update.

Docker Composeを使ってみる

Posted at

はじめに

docker-compose upでコンテナ起動できるのは知っているけど、じゃあその定義はどうやるのか?という疑問から
前回に引き続き、今回も「自分でもやってみよう」という試み。

Docker Composeについて

Docker Composeとは

簡単に言うと、コンテナの作成や停止などの一連の操作をまとめて実行できるようにする仕組み。docker-compose.yml という定義ファイルを用意し、読み込ませることで実行できる。
特に複数コンテナを連動させるアプリケーションを開発する際に便利。

Composeファイルを作成する

今回は「WordpressコンテナとMySqlコンテナを連動させる」ためのComposeファイルを作ってみる。

docker-compose.ymlファイルを作成する

type nul > docker-compose.yml

docker-compose.ymlの中身は下記のようにする。
今回は最低限の記述しかしていない。

version: '3.8'

services:
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpressdb
      MYSQL_USER: hoge
      MYSQL_PASSWORD: hogehoge

  wordpress:
    depends_on:
      - mysql
    image: wordpress
    ports:
      - 8080:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wordpressdb
      WORDPRESS_DB_USER: hoge
      WORDPRESS_DB_PASSWORD: hogehoge

冒頭のversionはDocker Composeのバージョン(バージョンによって記法が違うことがあるので冒頭で指定する)。

servicesに必要なコンテナを定義し、その中にコンテナごとの詳細を記述していく。
imageは起動するイメージ名、portsはポート指定、
restartは起動に失敗した際の再起動設定で、指定したalwaysは再起動を繰り返す。
environmentは環境変数の設定。

接続するネットワークを指定したい場合はnetworksを定義する。

wordpressのdepends_onとは依存関係で、WordpressはMysqlに依存したサービスのため
必ずMysqlが先に起動・後に停止するように明示する。

イメージのダウンロード

docker-compose pullすることで、docker-compose.ymlに定義したサービスのイメージをまとめてpullできる。(※コンテナの起動はしない)

docker-compose pull

Pulling mysql     ...
Pulling wordpress ...

pullするサービスを指定したい場合は docker-compose pull {service-name}

もちろん別途個別にpullしてもOK。
その際はdocker-compose.ymlに定義するイメージを
pullしたものに合わせて記述する。

コンテナを起動する

すべてのコンテナを起動する場合はdocker-compose up
-dオプションはデタッチモード指定で、
バックグラウンドでコンテナを起動することができる。

するとdocker-compose.ymlに定義した順にサービスが実行され、コンテナが起動する。

docker-compose up -d

Creating network "docker-compose_default" with the default driver
Creating docker-compose_mysql_1 ... done
Creating docker-compose_wordpress_1 ... done

実行するサービスを指定してコンテナ起動させたい場合は docker-compose up -d {service-name}

サービスの稼働状態を確認する

StateUpになっていれば、問題なくコンテナが起動している。

docker-compose ps

           Name                         Command               State          Ports
------------------------------------------------------------------------------------------
docker-compose_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
docker-compose_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

WordpressにアクセスできればOK!

サービスを停止する

docker-compose stop

サービスを再起動するには、起動中であればrestart
停止中であればstart

docker-compose.ymlを再実行したい場合はup

サービスを終了する

docker-compose down

error establishing a database connection対処方法

Wordpressにアクセスした際にerror establishing a database connection(データベース確立エラー)になる場合は、
docker-compose.ymlで両サービスrestart: unless-stoppedに変更して試してみる。

※こちらの記事を参考にしました
docker-compose wordpress mysql connection refused - Stack Overflow


お疲れさまでした!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0