서버를 부팅할 때 실행되는 운영체제를 일반적으로 '호스트 OS'라고 부르며, 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다.
따라서, 컨테이너 자체에 특별한 권한을 주지 않는 한, 컨테이너 내부에서 수많은 소프트웨어를 설치하고 설정파일을 수정해도, 호스트 OS에는 영향을 끼치지 않는다.
여러 모듈을 독립된 형태로 구성하는 마이크로서비스 구조라서 변화에 빠르게 대응할 수 있고, 각 모듈의 관리가 쉬워진다는 장점이 있다.
(💡예시. 웹서비스는 데이터베이스 컨테이너와 웹 서버 컨테이너로 분리할 수 있을 것이다.)
도커 컨테이너
- 도커 이미지는, 기본적인 운영체제, 데이터베이스, 각종 어플리케이션 등 다양한 종류가 있다.
이러한 이미지로 컨테이너를 생성하면, 파일 시스템이 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되는데 이를 컨테이너라고 한다.
- 리눅스 + 어플리케이션으로 java어플리케이션을 Linux에 리눅스 서버로 띄우는 것이다.
- 격리되어 있는 linux이다.
8081로 받아 8080으로 바꾼 것과 8082로 받아 8080으로 바꾼것을 실행한다고 할때 중복 포트번호로 오류가 발생하지 않고 정상동작한다. 그 이유는 8080으로 같은 포트넘버라도 서로 다른 컨테이너이기 때문에 가능하다.
도커 이미지
- 컨테이너를 실행할 수 있는 실행파일, 설정값등을 가지고 있는 것이다. 이미지는 상태값을 가지지 않고 변하지 않는다. 아래 그림처럼 이미지에서는 mysql, Apache 실행파일, 설정값만 가지고 있다가 이미지를 컨테이너에 담아 각자 다른 컨테이너에서 실행시킨다.
- jar파일이 들어있는곳 즉, java가 깔려있는 linux에 crud-api-0.0.1-SNAPSHOT.jar파일이 들어있는곳을 도커 이미지라고 한다.
이렇게 컨테이너를 나누어 실행하게 되면 더 이상 의존성 파일을 컴파일하고 새로운 환경에서 이것저것 설치할 필요가 없다. 즉, 새로운 서버가 추가된다면 미리 만들어놓은 이미지를 다운받고 컨테이너를 생성하기만 하면 된다. 또한 2개의 컨테이너를 서로 다른 포트번호를 가진 서버로 띄울수가 있다