前回の記事で作ったdockerファイルを整理した内容です。
【Node.js】 Dockerを用いてNode.js Express MySQLの環境を構築するまでの道のり
https://qiita.com/sho_U/items/0ef3dfc7b07b5e13fa18
最初に用意するパッケージ
app.env
app.env
MYSQL_SERVER=mysql
MYSQL_USER=(ユーザー名)
MYSQL_PASSWORD=(パスワード)
MYSQL_DATABASE=(データーベース名)
docker-compose.yml:
node.jsコンテナとmysqlコンテナを管理するyml
docker-compose.yml
version:'3'services:mysql:image:mysql:5.7container_name:(アプリ名)_dbenv_file:./mysql/mysql.envenvironment:-TZ=Asia/Tokyoports:-'3306:3306'volumes:-./mysql/conf:/etc/mysql/conf.d/:ro-mysqldata:/var/lib/mysqlnetworks:-backendapp:build:.container_name:(アプリ名)_appenv_file:./app.envenvironment:-TZ=Asia/Tokyo-DEBUG=app:*tty:trueports:-'3000:3000'volumes:-./src:/appworking_dir:/appcommand:npm starttrenetworks:-backenddepends_on:-mysql#使用するネットワークを作成。docker-composeの場合service以下の名前を使って名前解決されるため、appとmysqlが自動的に接続される。networks:backend:volumes:mysqldata:
Dockerfile:
アプリケーション用(node.js)コンテナを作るためのfile
dockerfile.
FROM node:12
WORKDIR /app
なぜかnpm installをRUNできないので,必要なパッケージはpackage.jsonに記載して、コンテナからnpm install を実施。
my.conf:
(コンテナ側の/etc/mysql/conf.d/に配置される。)
mysql/conf/my.conf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
lower_case_table_names=1
# Enable access from the host machine.
bind-address=0.0.0.0
mysql.env
mysql/mysql.env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=(ルートパスワード)
MYSQL_USER=(ユーザー名)
MYSQL_PASSWORD=(パスワード)
MYSQL_DATABASE=(データーベース名)
src:
アプリケーション本体(空ディレクトリ)
package.json:
初期は空
package.json(空)
{}
アプリケーション用のコンテナを作成する
コンテナをビルドする。
ホスト.
docker-compose build
ホスト.
#コンテナを一時的に起動(--rmで停止後削除する。コンテナ起動後、bashに入る)
docker-compose run --rm app /bin/bash
コンテナ.
# express-generatorでアプリケーションのひな形を生成
npx express-generator --view=ejs
package.jsonに必要なパッケージを記載(必要に応じて追加)
package.json
{"name":"アプリ名","version":"0.0.0","private":true,"scripts":{"start":"nodemon ./bin/www"//nodemon用起動scripts},"dependencies":{"cookie-parser":"~1.4.4","debug":"~2.6.9","ejs":"^3.1.5","express":"~4.16.1","express-generator":"^4.16.1","express-session":"^1.17.1","express-validator":"^6.7.0","http-errors":"~1.6.3","morgan":"~1.9.1","nodemon":"^2.0.6","sequelize":"^6.3.5","sequelize-cli":"^6.2.0"}}
コンテナ.
#インストール
npm install
コンテナ.
#コンテナを抜ける(この仮コンテナは削除される)
exit
※この時、コンテナは削除されるが
docker-compose.yml
volumes:-./src:/app
この記述により、.(docker-compose.ymlがあるディレクトリ。つまりnodoDockerディレクトリの配下のsrcディレクトリにマウントされているため、ホスト側のsrcディレクトリに作成した雛形は残っている。
コンテナを起動させる
host.
docker-compose up
docker-compose.yml
command:npm start
の記載により、コンテナ起動後、自動的にExpress.jsのアプリケーションがnodemonで起動する。
http://localhost:3000/
で確認。
mysqlコンテナに入れるか確認
docker exec -it コンテナID bash
mysql -uroot -p