Docker란?
Docker는 애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼이다.
Docker Image는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)을 포함한다.
Docker의 주요 특징
- 컨테이너화
애플리케이션과 필요한 모든 것을 하나의 패키지로 묶어 어디서든 실행할 수 있다.
- 경량
Docker는 운영 체제의 커널을 공유하므로, 가상 머신보다 훨씬 가볍고 빠르게 실행된다.
- 이식성
Docker 컨테이너는 어디서든 동일하게 실행된다. 예를 들어, 개발자의 컴퓨터에서 테스트 서버, 운영 서버까지 동일하게 동작한다.
- 확장성
Docker를 사용하면 여러 개의 컨테이너를 효율적으로 관리하고 쉽게 확장할 수 있다.
Docker의 주요 키워드
- Image
실행에 필요한 모든 것을 포함하는 읽기 전용 템플릿이다. 이미지는 컨테이너를 생성하기 위한 청사진 역할을 한다.
- Container
Docker Image를 실행한 상태이다. 이미지가 정적인 템플릿이라면, 컨테이너는 실제로 애플리케이션이 실행되는 동적인 환경이다.
컨테이너는 격리된 공간에서 애플리케이션을 실행한다.
하나의 시스템에서 여러 개의 컨테이너를 독립적으로 실행할 수 있다.
- Dockerfile
Docker Image를 생성하기 위한 스크립트이다. Dockerfile을 사용하면 이미지 생성 과정을 자동화하거나 일관되게 만들 수 있다.
이미지를 빌드하는 데 필요한 명령어 포함되어 있다.
- Docke Hub
Docker의 이미지를 공유하고 저장하는 중앙 저장소이다.
사용자는 Docker Hub 에서 다양한 공개 이미지를 다운로드 하거나 자신만의 이미지를 업로드 할 수 있다.
- Volume
컨테이너의 데이터를 지속적으로 저장할 수 있는 메커니즘이다.
컨테이너가 삭제되더라도 볼륨에 저장된 데이터는 유지된다.
- 네트워크
컨테이너 간의 통신을 관리하는 방식이다. Docker는 여러 가지 네트워크 설정을 지원한다.
기본적으로 모든 컨테이너는 브리지 네트워크를 통해 통신할 수 있다. (일단 브리지 네트워크만 기억하면 됨)
브리지 네트워크란?)
동일한 브리지 네트워크에 연결된 컨테이너들은 서로 통신할 수 있다. 일반적으로 단일 호스트에서 여러 컨테이너를 연결할 때 사용된다.
Docker는 보통 언제 사용될까?
1) 일관된 개발 환경이 필요할 때
2) 애플리케이션을 빠르게 배포하고 싶을 때
3) 마이크로서비스 아키텍처 (MAS)를 도입할 때
4) CI/CD 파이프라인을 구축할 때
Docker 이미지, 컨테이너 관련 명령어는 강의 필기 참고하기
Docker 이미지 받기 & 컨테이너 실행해보기
먼저 postgresql 이미지를 받아온다.
docker pull postgres
그럼 이제 Docker 컨테이너를 실행시켜 보자.
여기서 기억해둘 것이 있다.
Docker 컨테이너는 개별로 분리되어 있기 때문에 같은 포트를 사용해도 상관없다.
하지만 컨테이너의 포트를 외부에서 접근하기 위해 매핑되는 Host의 포트는 한정적이기 때문에, 같은 포트를 여러 컨테이너에 매핑하려고 하면 충돌이 발생한다.
만약 같은 포트의 컨테이너를 실행하려 하면?
독립적으로 개발 중인 A, B 서비스가 각각의 독립적인 postgreSQL DB를 가질 때 상황을 예시로 들어보겠다.
이렇게 각각의 서비스의 포트는 postgreSQL의 기본 포트인 5432를 가질 수 있지만, 매핑되는 Host 포트 번호는 각각 달라야 함을 알 수 있다.
'인프라 > Docker' 카테고리의 다른 글
241204 Docker SpringBoot와 함께 사용해보기 실습 TIL (2) | 2024.12.04 |
---|