mysql+node.js(express)をdokcer-composeしてみた
docker-composeご存知でしょうか?何も考えずに色々なアプリをまとめて管理できる優秀な仮想環境です。
今回はサクッと mysql+node.jsの環境を作れるようにひな形を用意しましたのでかるーく紹介していきたいと思います。
ソースコードはこちらにあります。クローンしてから進んでください。
予め以下をインストールしておいてください
- docker
- docker-compose
- node.js
dockerを導入してもdokcer-composeは自動で導入されませんし、dokcer-composeを導入してもdockerは自動で導入されません。各々インストールが必要です。インストール方法は割愛。
ディレクトリの構成です。appにはnode.jsのソースコードが入ってます。mysqlはデータベースですね。
docker-sample |-app |-mysql |-docker-compose.yml
こちらがdocker-compose.ymlの内容です。
version: '3' services: db: image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_DATABASE: dbname MYSQL_ROOT_PASSWORD: password TZ: "Asia/Tokyo" ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql # mysqlのデータを永続化 - ./mysql/init:/docker-entrypoint-initdb.d # コンテナ起動時にSQLを発行 - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf # 設定ファイルをバインド nodejs: image: node:12 tty: true ports: - "3000:3000" volumes: - ./app:/var/app command: node /var/app/index.js
各項目を簡単にご紹介します。
- image … コンテナの名前
- command … コンテナが立ち上がった際に実行するコマンド
- environment … 環境変数
- ports … 左から右へポートフォワード
- volumes … ローカルディレクトリをコンテナ内のディレクトリにバインドします
次にappディレクトリでnpm i
を実行してnodeモジュールをインストールします。
cd app npm i
これで準備は整いました。docker-sampleディレクトリに移動しdocker-compose up
※オプションで-dをつけるとデーモンで起動させれます。
cd .. docker-compose up
コンテナが起動したか確認してみましょう
docker ps
以下のようになっていればOKです。※CONTAINER IDは変わります
さっそくlocalhost:3000にアクセスしてみてください。Expressと表示されていれば完成です。またlocalhost:3000/usersにアクセスするとmysqlに入っているレコードが表示されます。
各コンテナに入りたいときはこちらのコマンド
docker-compose exec db bash docker-compose exec nodejs bash
まとめ
意外とdocker-compose+mysql+node.jsの記事が見つからなくて困ったので備忘録もかねて作ってみました。
え?たったこれだけ?と思うかもしれませんがたったこれだけなんです。ちなみにappの中身はexpress-ganeratorに–view=ejsを使用して作成し、mysqlとコネクトする部分を書いただけです。ソースを作るのに30分もかかりませんでした。
あとは煮るなり焼くなり自由に使ってください。これでちょっとしたWEBサービスがいつでも作れますね!