본문 바로가기
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라는 호스팅 서비스를 이용하면 별도의 가상 서버가 필요 없이 컨테이너 이미지를 그대로 실행 가능