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_HOSTmysqlMySQL 서버의 호스트 이름
MYSQL_USERroot연결에 사용할 사용자 이름
MYSQL_PASSWORD<your-password>연결에 사용할 암호
MYSQL_DATABASEtodos연결이 설정된 후 사용할 데이터베이스 이름

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 을 클릭하면 알아서 올라옴