본문 바로가기

Cloud/Docker

[Docker] Node.js 경량 웹서버 컨테이너화 및 MySQL 연동

소스코드 다운로드

Node.js 경량 웹서버 코드는 여기서 받을 수 있다.
 

GitHub - docker/getting-started-app: A simple application for the getting started guide in Docker's documentation

A simple application for the getting started guide in Docker's documentation - docker/getting-started-app

github.com

 

$ git clone https://github.com/docker/getting-started-app.git

 
 

MySQL 컨테이너 활성화

1. 네트워크 생성

$ docker network create todo-app

 
2. MySQL 컨테이너 생성 및 실행

$ docker run -d \
    --network todo-app --network-alias mysql \
    -v todo-mysql-data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=secret \
    -e MYSQL_DATABASE=todos \
    mysql:8.0

 
todo-mysql-data라는 볼륨을 /var/lib/mysql에 마운트한다.
여기서 todo-mysql-data는 사용자가 직접 생성한 적이 없지만, Docker가 해당 볼륨이 이미 존재하는지 확인 후 자동으로 생성한다.

 
3. 생성한 MySQL 컨테이너 접속 테스트

$ docker exec -it <mysql-container-id> mysql -u root -p

 

 
 

웹서버 컨테이너화 및 MySQL 서버 연동

$ docker run -dp 127.0.0.1:3000:3000 \
  -w /app -v "$(pwd):/app" \
  --network todo-app \
  -e MYSQL_HOST=mysql \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=secret \
  -e MYSQL_DB=todos \
  node:18-alpine \
  sh -c "yarn install && yarn run dev"

아까 받아왔던 소스코드에서 /app 하위 디렉토리의 코드들을 사용하여 웹서버를 띄운다. 이 때 위에서 띄워둔 MySQL 서버 로그인 정보를 함께 적어주어 연동한다.
 

DB 테이블 내용 확인

 

+ Docker Compose 파일로 배포하기

위에서 설명한 일련의 과정들을 Docker Compose 파일에 하나로 정리해 쉽게 배포할 수 있다.
<compose.yaml/>

services:
  app:
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

compose 파일을 실행한 디렉토리의 이름으로 컨테이너 묶음이 생성된다.

서비스도 잘 동작함

구성 해제

$ docker compose down