새로운 사이드프로젝트를 시작하면서 데이터베이스를 도커를 통해 서버로 올려보려고 한다.
근데 도커를 전혀 몰라서 공식문서로 기본 개념공부를 해본다.

- 컨테이너란?
컨테이너는 각 앱의 구성요소에 대한 격리된 프로세스이다. 즉 프론트, 백엔드, 데이터베이스 세가지로 격리되어 각각의 컨테이너에서 실행된다. 그래서 버전관리, 환경 충돌 문제를 해결할 수 있다.
여기서 말하는 버전과 환경은 java를 여러버전으로 쓸 때 각 컨테이너는 본인의 java만 쓰기 때문에 충돌이 없다고 하는 것이다. 또 시스템 운영체제와는 별도로 컨테이너가 작동하기 때문에 어디서든 동일한 환경으로 작업이 가능하다.
만약에 새 팀원이 Docker로 프로젝트를 설정한다면?
버전관리를 도와준다고 해서 구체적으로 알아봤다.
- 프로젝트 클론 (깃으로 코드 클론)
- 도커 설치
- Docker Compose로 프로젝트 실행
프로젝트에는 docker-compose.yml파일이 있다. 프론트, 백엔드, 이비 등을 정의한 파일로 팀원이 따로 설정할 필요 없이 docker-compose로 컨테이너를 한번에 실행할 수 있다.
- localhost:3000 실행
이런식으로 도커가 모든 팀원간의 프로젝트를 같은 개발환경에서 쓸 수 있게 도와준다.
- VM
VM은 가상컴퓨터라고 생각하면 된다. 가장 와닿는 예는 VM = ec2 인스턴스였다. 즉 클라우드 서비스는 물리적인 서버 대신 가상 머신을 사용해 컴퓨터 자원을 제공하는데 aws에서는 웹사이트, 디비, 애플리케이션 서버 등 vm(인스턴스)를 생성하고 vm의 사양을 조정할 수 있다고 생각하면 된다.
또 하나의 vm에서 발생한 문제가 다른 vm에 영향을 미치지 않고 물리적인 서버 하나에서 여러 vm을 실행할 수 있기 때문에 하드웨어 자원의 효율성이 좋다는 장점이 있다.
- 이미지
컨테이너 이미지는 컨테이너를 실행하는데 필요한 모든파일, 바이너리, 라이브러리 구성을 포함한 패키지이다.
컨테이너 이미지는 레이어로 구성되어있는데 뜻은 여러단계로 이루어진 구조를 갖고 있다는 뜻이다. 각 레이어는 파일 시스템에 대한 특정 변화를 나타내며, 새파일을 추가, 기존 파일을 수정, 불필요한 파일을 삭제한는 작업이 포함된다.
- 기본 이미지 : 첫번 째 레이어는 기본운영체제(우분투 등)으로 시작
- 변경 레이어 : 추가되는 각 레이어는 예를 들어 소프트웨어 설치, 설정파일 추가 등의 작업이 레어어를 한개씩 추가한다.
- 레이어 저장 방식 : 각 레이어는 독립적으로 저장되고, 이전 레이어에서 변경된 부분만 저장된다. 변경되지 않은 부분은 다시 복사되지 않고 효율적으로 관리된다.
다음 포스팅은 실제 데이터베이스를 올리고 난 이후이다. 끝