VS Code와 함께 도커 실습하기
다중 컨테이너 앱 만들기
0. Docker Compose 설치
- 윈도우는 (아마) 따로 깔아줘야 하는걸로 알고있음
- 맥은 도커 깔면 같이 깔림
1. 네트워크 만들기
- 컨테이너는 기본적으로 아무 설정을 하지 않으면 다른 컨테이너와 통신할 수 없음
- 여러 컨테이너를 하나의 네트워크로 묶는다면 가능함
docker network create <네트워크명>
docker network create todo-app
2. MySQL 컨테이너 돌리기
docker run -d --network <네트워크명> --network-alias <> -v <컨테이너명>:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<패스워드> -e MYSQL_DATABASE=<생성할_데이터베이스명> mysql:lts
docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<your-password> -e MYSQL_DATABASE=todos mysql:lts
- 위에서 돌린 MySQL 컨테이너의 아이디를 찾기
docker ps

- 현재 MySQL 컨테이너 아이디를 알 수 있음
docker exec -it <MySQL컨테이너ID> mysql
- 이러면 docker로 돌린 MySQL 컨테이너에 접속해서 쿼리를 날리거나 할 수 있음
3. 애플리케이션 컨테이너 돌리기
docker run -dp <호스트포트>:<컨테이너포트> -w <컨테이너_내부작업_기본경로> -v <호스트위치>:<컨테이너_안에_마운트할위치> --network <네트워크명> -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=<your-password> -e MYSQL_DB=todos node:lts-alpine sh -c "yarn install && yarn run dev"
docker run -dp 3000:3000 -w /app -v ${PWD}:/app --network todo-app -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=<your-password> -e MYSQL_DB=todos node:lts-alpine sh -c "yarn install && yarn run dev"
| 변수 이름 | 예제 값 | 설명 |
|---|
MYSQL_HOST | mysql | MySQL 서버의 호스트 이름 |
MYSQL_USER | root | 연결에 사용할 사용자 이름 |
MYSQL_PASSWORD | <your-password> | 연결에 사용할 암호 |
MYSQL_DATABASE | todos | 연결이 설정된 후 사용할 데이터베이스 이름 |
4. Docker Compose로 한 번에 설정하기
- docker-compose.yaml 파일 가지고 한 번에 킬 수 있음
version: "3.7"
name: todo
services:
app:
image: node:lts-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- "<호스트_포트>:<컨테이너_포트>"
working_dir: <명령_실행할_위치>
volumes:
- <호스트_마운트할_폴더>:<컨테이너_마운트될_경로>
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: <DB_비밀번호>
MYSQL_DB: todos
mysql:
image: mysql:lts
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: <DB_비밀번호>
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
version: "3.7"
name: todo
services:
app:
image: node:lts-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- "3000:3000"
working_dir: /app
volumes:
- ./app:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: <DB_비밀번호>
MYSQL_DB: todos
mysql:
image: mysql:lts
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: <DB_비밀번호>
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
- 완성된 docker-compose 파일을 우클릭하고 compose up 을 클릭하면 알아서 올라옴