소스코드 다운로드
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
'Cloud > Docker' 카테고리의 다른 글
[Docker] Multi-stage Build (0) | 2025.02.12 |
---|---|
[Docker] Networking (0) | 2025.02.06 |
[Docker] 볼륨(Volume)을 이용한 데이터 영속성 관리 (0) | 2025.02.05 |
[Docker] 도커를 이용한 애플리케이션 컨테이너화 및 배포 과정 (0) | 2025.02.05 |