본문 바로가기
Devops & 인프라/Docker

docker가 뭐지?

by wcwdfu 2025. 6. 5.


Docker 왜 쓰나?

 

한마디로 말하면 환경 차이를 없애고 어디에서나 동일하게 실행되도록 하기 위해서이다.

어렵게 표현하면 뛰어난 이식성이 있다고 할 수 있다.

--

 

Docker 란?

각 애플리케이션을 격리된 컨테이너 환경에서 실행할 수 있게 해주는 도구다.

나도 첨에 정의만 보고 전혀 와닿지 않았다. 그럴수밖에 없는것같다. 일단 써봐라. 그래야 이해가 간다.

---

 

컨테이너(Container) 란?

그냥 무언가를 실행하기위한 하나의 독립된 환경이라고 생각하면 될것같다. 실행 환경을 표준화해주는 격리된 단위이다.

이 컨테이너들을 품고있는 컴퓨터가 있을텐데, 이는 호스트(host)컴퓨터 라고 한다.

--

 

컨테이너의 특징

1. 격리성. 호스트 시스템과 리소스(프로세스, 파일시스템 등)를 공유하지 않는다. 다른 컨테이들끼리도 마찬가지이다.

저장공간도 분리되어있다. 컨테이너마다는 고유의 네트워크를 가지고 있다. 각자의 ip주소, 포트를 가지고 있다.

2. 경량성. 전통적인 VM과 달리 운영체제를 포함하지 않는다. 호스트 OS의 커널을 공유하기 때문에 빠르고 메모리 사용이 적다.

3. 이식성. 컨테이너 안에 필요한 모든 라이브러리가 있으므로 어디서든(개발pc, 테스트서버, 클라우드 등) 똑같이 실행이 가능하다.

4. 불변성. 컨테이너의 이미지는 변경되지 않는 상태로 배포된다.

5. 확장성. 컨테이너는 필요한 만큼 스케일링이 가능하다. Kubernetes 같은 도구로 자동 배포나 관리 또한 가능하다.

--

 

도커 볼륨(Docker Volume) 이란?

컨테이너는 재시작하거나 삭제하면 내부 데이터도 같이 사라진다. 따라서 이 데이터가 사라지지 않도록 호스트의 저장공간을 공유해서 저장해 데이터를 영속적으로 유지시키기 위한 방법이다.

--

 

이미지(Image) 란?

비유하자면 닌텐도의 게임칩과도 같다. 게임칩이 이미지다.

설치과정, 실행파일, 환경변수, 필요한 라이브러리, 설정파일 등 프로그램을 실행하는데 필요한 모든것을 담고 있다.

mysql이 될 수도 있고 kafka가 될 수도 있다. 그냥 하나의 프로그램패키지라고 보면 된다.

이미지는 간단한 명령어만 입력하면 쉽게 다운받을 수 있다.

--

 

도커허브(Docker Hub) 란?

도커 이미지를 저장하고 공유할 수 있는 온라인 저장소이다. 명령어만 입력하면 도커허브에서 알아서 다운받아진다.

--

 

도커 파일(Docker file) 이란?

도커의 이미지를 만들기 위한 설정서 이다. 도커 파일을 통해서 이미지를 만들 수 있다.

자기만의 스프링부트 프로젝트또한 이미지로 만들 수 있다.

--

 

도커 컴포즈(Docker Compose) 란?

여러 개의 컨테이너들 하나의 서비스로 규정해 하나의 설정 파일로 정의하고 관리할 수 있게 해주는 도구이다.

docker-compose.yml 파일에 정의해두고나서 복잡한 명령어들로 실행시키던걸 docker compose up 명령어로 한번에 실행시킬 수 있다. (백그라운드 실행시 뒤에 -d 추가)

컴포즈로 실행된걸 종료 : compose stop

컴포즈로 실행된걸 종료후 제거 : compose down

 

아래는 간단한 yml 예시이다.

services:
  my-web-server: # 지정하고 싶은 서비스 이름을 작성
    container_name: webserver # 컨테이너에 지정하고 싶은 이름을 작성
    image: nginx # 사용할 이미지
    ports:
      - 80:80 # 호스트:컨테이너 포트

도커 컴포즈는 하나의 컨테이너를 service 라고 부른다.