【Node.js】 Docker를 사용하여 Node.js Express MySQL의 환경을 구축하기까지의 길
htps : // 이 m/쇼_우/있어 ms/52에221877아271146세84
완성된 이미지 구성
nodoDocker (루트 디렉토리)
Dockerfile:
애플리케이션 용 (node.js) 컨테이너를 만들기위한 파일
app.env:
mysql과의 연결 설정을 설명하는 파일
docker-compose.yml:
node.js 컨테이너와 mysql 컨테이너를 관리하는 yml
src:
애플리케이션 본체
애플리케이션용 컨테이너 만들기
먼저 응용 프로그램 용 임시 컨테이너를 만들고 응용 프로그램의 병아리를 만듭니다. 그 앱의 병아리는 호스트 측에 마운트 해 놓고, 그 병아리를 이용하여 docker-compose를 작성해 간다.
nodeDocker 아래에
docker-compose.yml 만들기
docker-compose.yml
version: '3'
services:
app:
# dockerimageのファイルを指定
build: .
# コンテナ名
container_name: node_docker_app
# 環境変数を設定
environment:
- DEBUG=app:*
tty: true
# ホスト側のポート:コンテナのポート
ports:
- '3000:3000'
# ソースコードを格納するフォルダをマウント
#(ホスト側の./srcをコンテナの/appにマウント)
volumes:
- ./src:/app
# 起動時のカレントフォルダを指定
working_dir: /app
# 起動後に実行するコマンドを指定(起動確認用)
command: npm start
node를 끌어옵니다.
dockrefile.
FROM node:12
호스트.
#コンテナを一時的に起動(--rmで停止後削除する。コンテナ起動後、bashに入る)
docker-compose run --rm app /bin/bash
컨테이너.
# express-generatorでアプリケーションのひな形を生成
npx express-generator
# 依存パッケージをインストール
npm install
#コンテナを抜ける(この仮コンテナは削除される)
exit
※이때 컨테이너는 삭제되지만
docker-compose.yml
volumes:
- ./src:/app
이 기술에 의해,.
컨테이너 시작
host.
docker-compose up
docker-compose.yml
command: npm start
설명에 따라 컨테이너 시작 후 Express.js 응용 프로그램이 자동으로 시작됩니다.
http://localhost:3000/
에서 확인.
컨테이너 중지
host.
#再度コンテナを一時的に起動
docker-compose run --rm app /bin/bash
#ソースコードの変更を検知して必要な時にアプリケーションを再起動してくれる、「nodemon」というツールをインストール。
#変更のたびにコンテナの停止・再起動することしなくてよくする。
npm install -D nodemon
package.json 수정
src/package.json
"scripts": {
"dev": "nodemon ./bin/www",
"start": "node ./bin/www"
},
docker-compose.yml 파일 편집
docker-compose.yml
(変更前)
command: npm start
(変更後)
command: npm run dev
MySQL 용 컨테이너 추가
docker-compose.yml에 mysql 설정 추가
docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
env_file: ./mysql/mysql.env
#環境変数設定。タイムゾーンを日本時間に設定。
environment:
- TZ=Asia/Tokyo
ports:
- '3306:3306'
volumes:
#mysqlのデフォルト設定ファイルを上書き。:roでコンテナ側からは読み取り専用設定。
- ./mysql/conf:/etc/mysql/conf.d/:ro
#mysqldataにマウントすることで、コンテナを削除してもデーターは残るように設定。
- mysqldata:/var/lib/mysql
networks:
- backend
app:
image: node:12
env_file: ./app.env
#環境変数設定。タイムゾーンを日本時間に設定。
environment:
- TZ=Asia/Tokyo
- DEBUG=app:*
tty: true
ports:
- '3000:3000'
volumes:
- ./src:/app
working_dir: /app
command: npm run dev
networks:
- backend
#mysqlに依存しているので、mysqlコンテナ作成後、appコンテナが作られる。
depends_on:
- mysql
networks:
backend:
volumes:
mysqldata:
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 폴더에 mysql.env 파일을 만듭니다. (env_file : ./mysql/mysql.env의 설명에 따라 내용이 컨테이너 측의 mysql 환경 변수로 설정됩니다)
mysql/mysql.env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=(ルートパスワード)
MYSQL_USER=(ユーザー名)
MYSQL_PASSWORD=(パスワード)
MYSQL_DATABASE=todo
app.env 파일 만들기 (응용 프로그램 컨테이너의 환경 변수 설정)
app.env
MYSQL_SERVER=mysql
MYSQL_USER=(ユーザー名)
MYSQL_PASSWORD=(パスワード)
MYSQL_DATABASE=todo
docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
container_name: node_docker_db
env_file: ./mysql/mysql.env
environment:
- TZ=Asia/Tokyo
ports:
- '3306:3306'
volumes:
- ./mysql/conf:/etc/mysql/conf.d/:ro
- mysqldata:/var/lib/mysql
networks:
- backend
app:
image: node:12
container_name: node_docker_app
env_file: ./app.env
environment:
- TZ=Asia/Tokyo
- DEBUG=app:*
tty: true
ports:
- '3000:3000'
volumes:
- ./src:/app
working_dir: /app
command: npm run dev
networks:
- backend
depends_on:
- mysql
#使用するネットワークを作成。docker-composeの場合service以下の名前を使って名前解決されるため、appとmysqlが自動的に接続される。
networks:
backend:
volumes:
mysqldata:
mysql에 로그인
host.
docker-compose exec mysql mysql -uroot -p
할 수 없다,,,
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
여러가지 시도한 결과
host.
docker-compose down --volumes
volume을 삭제하면 로그인할 수 있었다. 원인은 불명.
ejs를 템플릿 엔진에 사용하기 위해 설치를 기재한 dockerfile을 루트 바로 아래에 배치.
#node.jsのイメージをプル。
FROM node:12
#作業ディレクトリをアプリケーションディレクトリにする。
WORKDIR /app
ejsをインストール。
RUN npm install ejs
어플 리케이션 컨테이너가 Dockerfile로 빌드하도록 했기 때문에
docker-compose.yml
(変更前)
image: node:12
(変更後)
build: .
일단 완료.
Reference
이 문제에 관하여(【Node.js】 Docker를 사용하여 Node.js Express MySQL의 환경을 구축하기까지의 길), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho_U/items/0ef3dfc7b07b5e13fa18텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)