본문 바로가기
Docker

[Docker] 도커 기초

by 상똥 2024. 7. 24.

[1. Docker] 

1. 도커란?

- 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

- 도커는 데이터 또는 프로그램을 격리시키는 기능을 제공한다

- 도커를 통해 애플리케이션을 관리하는 방식과 동일한 방법으로 인프라를 관리할 수 있다

- 리눅스 운영체제에서만 동작 (리눅스 운영체제가 동작하는 것을 전제로 함)

 

※ 프로그램을 독립된 환경에 격리시키는 이유 : 하나의 프로그램은 여러개의 프로그램으로 이루어진 경우가 많다. 어떤 프로그램C기 여러개의 프로그램(A, B)에 연동되어 있는 경우, 하나의 프로그램B만을 위해 수정된다면 다른 프로그램A가 작동하지 않을 가능성이 크다. 이런 문제를 방지하기 위해 [프로그램A + 프로그램], [프로그램B + 수정된 프로그램]과 같이 나누어 독립적으로 격리하면 프로그램C를 둘 중 하나의 프로그램을 위해 수정해도 문제가 발생하지 않는 것이다.

 

2. 도커를 사용하는 이유

- 애플리케이션을 인프라에서 분리해 소프트웨어를 신속하게 제공할 수 있다

- 코드 작성과 프로덕션 환경 실행 사이의 지연 시간을 크게 줄일 수 있다

- 애플리케이션 운영을 표준화할 수 있다

- 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보할 수 있다

- 간단한 구문을 사용해 제어가 가능하다

 

3. 컨테이너와 엔진

- 컴퓨터에 설치된 프로그램을 각각 독립된 환경으로 나눔

- 독립된 환경 = 컨테이너

- 컨테이너를 관리하는 기능을 제공하는 것 = 도커

- 도커를 사용하기 위해 설치해야 하는 소프트웨어 = 도커 엔진

 


[2. 서버와 도커]

1. 서버란

- 기능적 의미 : 어떤 서비스를 제공하는 것

- 물리적 의미 : 물리적으로 존재하는 것

- 물리적으로 존재하는 서버에 기능적 의미의 서버를 여러 개 둘 수 있다!

 

2. 도커의 사용

- 한 대의 컴퓨터(물리적 서버)에서 여러개의 웹 서버(기능적 의미)를 띄우는 경우 → 물리서버의 개수를 줄여 비용이 감소되나, 서로의 환경을 건드리게 될 수 있음

- 도커를 사용하여 한 대의 컴퓨터에 여러개의 웹 서버를 띄우는 경우 비용도 감소되고 각 웹 서버가 독립된 환경에서 안정적으로 구동됨

 


[3. 컨테이너]

1. 컨테이너의 특징

- 컨테이너는 프로그램이 격리된 독립적인 환경

- 컨테이너 속 프로그램의 명령을 전달하기 위해 필요한 최소한의 리눅스 일부가 들어있음 (운영체제 전체가 있는 것이 아니므로, 가벼움)

- 컨테이너의 정보를 내보낼 수 있음

- 내보낸 정보를 다른 도커 엔진에서 복원

- 위의 과정으로, 컨테이너는 자유로이 옮길 수 있는 특징을 가짐

- 즉, 하나의 컨테이너를 배포하면 여러 사람이 동일한 환경을 사용할 수 있는 것

- 도커를 통해 운영체제가 달라도 컨테이너를 옮길 수 있음 → 물리적 환경 / 서버 구성의 차이를 무시할 수 있어 그로 인한 문제를 방지 

 


[4. 도커, 가상화 기술, AWS EC2]

1. 가상화 기술과 도커

가상화 기술 도커
- 가상의 물리 서버를 만드는 것
- 물리적인 개념이 아니라 소프트웨어 환경이지만 실질적으로 물리서버와 동등
- 운영체제 또한 제약이 없이 아무 것이나 설치 가능
- 어떤 소프트웨어도 실행 가능
- 기능의 일부를 물리서버에 맡겨 컴퓨터에 의존하는 형태
- 컨테이너의 내용 또한 운영체제(리눅스)가 됨

 

2. AWS EC2와 도커

- AWS EC2에는 인스턴스라는 컨테이너와 비슷한 개념이 있으나, EC2 또한 가상화 개념

- AWS EC2라는 호스팅 서비스를 이용하면 별도의 가상 서버가 필요 없이 컨테이너 이미지를 그대로 실행 가능