docker를 사용하는 의의
- 코드를 통한 실행 환경 구축 및 애플리케이션 구성
- 실행환경과 애플리케이션의 일체화로 이식성 향상
- 프론트엔드의 경우 Apache나 NGINX 같은 웹 서버를 두는 것도 복잡한 절차 없이 컨테이너로 설정할 수 있게됨.
- 시스템을 구성하는 애플리케이션 및 미들웨어의 관리 용이성
- 미들웨어를 포함하는 시스템 구성 역시 설정 파일로 정의할 수 있음.
환경 차이로 인한 문제 방지
<aside>
💡 "B 서버에도 같은 애플리케이션을 배포하고 싶은데, 애플리케이션이 A 서버와 다르게 동작하네..."
"모든 서버에 같은 아카이브를 배포하고 싶은데..."
"서버 설정과 설치된 라이브러리가 서버마다 다르면 어떡하지?"
"B 서버에 설치된 라이브러리가 버전이 낮은 거였네, 업데이트 해야겠다!"
"서버 상태를 똑같이 유지하는 수단이 필요하겠어"
</aside>
- 위 상황은 모두 배포 대상 서버간에 차이가 있어 애플리케이션이 기대했던 대로 동작하지 않는 상황임.
- 이 문제의 근본적인 원인은 인프라의 가변성(mutable infrastructure)을 허용하고 있기 때문
- 이 문제를 해결하기 위해 최근 제안된 것이 코드로 관리하는 인프라와 불변 인프라 개념임.
도커 컨테이너 배포
docker 이미지와 컨테이너의 관계의 사본
도커 이미지 하나로 여러개의 컨테이너를 실행할 수 있음.
Docker 컨테이너 생명 주기
