Cloud/Docker
[Docker] Node.js 경량 웹서버 컨테이너화 및 MySQL 연동
nolzaheo
2025. 2. 10. 16:30
소스코드 다운로드
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 서버 로그인 정보를 함께 적어주어 연동한다.



+ 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