4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最近よく使っているDocker構成の備忘録 (NodeJS+Redis+MySQL)

Last updated at Posted at 2019-09-29

はじめに

この記事は最近Dockerをよく使うようになってきて、
開発環境を作っては捨て作っては捨てを繰り返しつつ、いろいろ試しているうちに
個人的によく使いそうな構成が見えてきたので、それをメモとして残しておく目的で記載しています。

アーキテクチャ

NodeJS + Redis + MySQLによる構成で作っていきます。
主な内訳は以下の通りです。

利用目的
NodeJS webアプリケーション
MySQL ユーザー等の主なデータ
Redis セッション,キャッシュ

今回セッションとキャッシュをどちらもRedisで管理してしまっていますが、
分けるソリューションもあると思います。
一例としては、キャッシュとかはDynamoDBでセッション管理はRedisに保存みたいな感じですかね。
自分が作る程度の環境だとそこまで分ける必要性を感じなかったので、すべてRedisで管理してました。

ディレクトリ構成

このあとdocker-compose.ymlを記載しますが、
今回は以下のディレクトリ構成を前提で進めています。

├── data
│   ├── mysql
│   └── redis
├── docker-compose.yml
├── mysql
│   └── Dockerfile
├── app
│   ├── Dockerfile
│   ├── app.js
│   ├── bin
│   │   └── www
│   ├── node_modules
│   ├── package-lock.json
│   ├── package.json
│   ├── public
│   │   ├── images
│   │   ├── javascripts
│   │   └── stylesheets
│   │       └── style.css
│   ├── routes
│   │   ├── index.js
│   │   └── users.js
│   └── views
│       ├── error.jade
│       ├── index.jade
│       └── layout.jade
└── redis
    └── Dockerfile

docker-compose.yml

今回は、Docker-Composeを使ってNodeJS、MySQL、Redisのそれぞれでコンテナ立ち上げていく形にしていきます。
docker-composeの内容は以下の通りです。

docker-compose.yml
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./app/Dockerfile
    depends_on:
      - mysql
      - redis
    ports:
      - '3000:3000'
    tty: true
    container_name: node_app

  mysql:
    build:
      context: .
      dockerfile: ./mysql/Dockerfile
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: user
      MYSQL_PASSWORD: hogehoge
      MYSQL_DATABASE: testdb
    volumes:
      - ./data/mysql:/var/lib/mysql
    container_name: mysql

  redis:
    build:
      context: .
      dockerfile: ./redis/Dockerfile
    restart: always
    volumes:
      - ./data/redis:/data
    container_name: redis

servicesに対してwebアプリケーションや他のミドルウェアのDockerイメージに関する設定内容を記載しています。
appのところにはdepends_onがありますが、これは記載されている他のイメージとの依存関係を示すものになっています。依存関係のあるものが解決してからappの内容が動作します。
それぞれbuildのところで、どのDockerfileを使用してDockerイメージをbuildするかを設定しているのがわかると思うので、Dockerfileも記載しましょう。

./app/Dockerfile

./app/Dockerfile
FROM node:latest

WORKDIR /home/app

COPY ./app/package*.json ./

RUN npm install

COPY ./app ./

EXPOSE 3000

./mysql/Dockerfile

./mysql/Dockerfile
FROM mysql:5.7

# ADD ./mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

EXPOSE 3306

./redis/Dockerfile

./redis/Dockerfile
FROM redis

# COPY redis.conf /usr/local/etc/redis/redis.conf

EXPOSE 6379

実行

docker-compose.ymlのあるディレクトリで実行します。

build

$ docker-compose build

起動

$ docker-compose up -d

exec

# nodeのコンテナ
$ docker-compose exec app bash

# redisのコンテナ
$ docker-compose exec redis bash

# mysqlのコンテナ
$ docker-compose exec mysql bash

ここに記載していないコマンドはこちらの方の記事が参考になります。
docker-compose コマンドまとめ

おわりに

個人的に利用することの多そうな環境をメモがてら書いていきましたが、
間違いやよりよい方法があればぜひ教えてください🙇‍♀️

4
6
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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?