[Docker] 3. 도커 컨테이너의 생애주기와 장/단점

sorzzzzy·2022년 4월 30일
3

Docker&Kubernetes

목록 보기
3/12
post-thumbnail

🏷 도커 컨테이너의 생애주기와 데이터 저장

도커 컨테이너의 생애주기

도커 컨테이너의 Lifecycle 에 대해 알아보자.
컨테이너는 '오랫동안 아껴 쓰는 물건' 보다는, '그때 그때 쓰고 버리는 일회용품' 에 가깝다.

✔️ 도커 컨테이너는 '쓰고 버리는' 일회용품

앞서 말했듯, 컨테이너는 쓰고 버리는 일회용품과 같다.

컨테이너는 쉽게 생성할 수 있으므로, 컨테이너 하나를 가지고 계속 업데이트하며 사용하기 보다는 업데이트 된 소프트웨어가 들어있는 새로운 컨테이너를 사용하는 것이 좋다!

💡 새로운 버전이 나오면 새로운 컨테이너로 갈아타는 것이 좋다!

이것이 가능한 이유는,
컨테이너는 일반적으로 여러 개를 동시 가동하는 상황을 전제로 하기 때문이다.

초기 구축을 간단히 마쳤다 하더라도, 유지보수할 때마다 여러 개의 컨테이너를 하나하나 업데이트하기에는 많은 수고가 들고, 컨테이너가 가지는 장점이 반감된다.

이러한 이유로 오래된 컨테이너를 버리고, 새로운 이미지로부터 새로운 컨테이너를 만들어 갈아타는 방식을 사용한다.


✔️ 컨테이너의 생애주기

컨테이너의 생애주기, Lifecycle에 대해 들어봤을 것이다.
컨테이너를 만들고 ➡️ 실행하고 ➡️ 종료하고 ➡️ 폐기하고 ➡️ 다시만드는 일련의 과정을 컨테이너의 생애주기라고 부른다.

컨테이너는 보통 실행, 정지, 파기3가지 상태의 생애주기를 갖는다.

1. 실행

  • docker container run 명령어의 인자로 지정된 도커 이미지를 기반으로 컨테이너가 생성된다.

2. 정지

  • 실행 중 상태에 있는 컨테이너를 사용자가 명시적으로 정지할 수 있다.
  • 컨테이너에서 실행된 애플리케이션이 정상/오류 종료된 경우에는 컨테이너가 자동으로 정지 상태가 된다.

3. 파기

  • 정지 상태의 컨테이너는 명시적으로 파기하지 않는 이상 디스크에 그대로 남아있다.
  • 디스크에 용량을 차지하고 있으므로 불필요한 컨테이너는 완전히 삭제하는 것이 좋다.
  • 한 번 파기된 컨테이너는 다시 실행할 수 없다.

AWS EC2 Auto Scaling 에 대해 공부하면, 이 생애주기에 대해 더욱 명확하게 이해할 수 있다!


도커의 데이터 저장

컨테이너를 파기한 이후 컨테이너에 들어있는 데이터는 어떻게 될까?
컨테이너 안에 들어있었기 때문에 당연히 사라진다!

이런 곤란한 상황을 방지하기 위한 방법을 알아보자.

✔️ 물리적 컴퓨터의 일부를 마운트하고 데이터를 저장한다.

보통 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해 이 디스크에 데이터를 저장한다.

마운트
디스크를 연결해 데이터를 기록할 수 있도록 한 상태
우리가 사용하는 컴퓨터에 외장 USB 메모리, HDD를 연결하는 것과 같음

이렇게 도커 컨테이너에도 물리적 컴퓨터의 디스크를 연결해 데이터를 기록하면,
컨테이너가 폐기되더라도 데이터는 컨테이너 외부에 안전하게 저장되어 사라지지 않는다.

또한 데이터를 이렇게 외부에 저장하면, 다른 컨테이너와 데이터를 공유할 수 있어 편리해진다.

이런 의미에서 '일회용품과 같은 컨테이너' 라고 표현을 한 것이다.

정리하자면
운영체제나 소프트웨어 부분은 컨테이너 형태로 만들어 쓰고 버리는 과정을 반복하고,
데이터는 다른 곳에 저장해두고 같은 것을 계속 사용한다.

따라서 프로그램을 개발할 때는 다른 저장소에 저장하지 않는 경우도 고려해서,
컨테이너를 폐기하기 전에 중요한 데이터가 컨테이너에 포함되어 있는지 꼭 확인해야 한다.

또한 중요하거나 보안이 필요한 내용들이 들어있는지, 다른 호스트들과 의존성이 있는 지도 고려해야 하는 사항이다.


🏷 도커의 장점과 단점

도커의 특징을 알아봤으니 이제 도커의 장/단점을 알아보도록 하겠다.

도커의 구조와 성질 및 그 장단점

✔️ '환경을 격리할 수 있다' 가 핵심

도커의 가장 핵심 성질은 바로 환경을 격리할 수 있다는 것이다.
이 성질을 바탕으로 각각의 특징이 어떤 장점을 가지는 지 알아보자.

1. 독립된 환경

  • 독립된 환경은 여러개의 컨테이너를 띄울 수 있게 함
  • 똑같은 애플리케이션 여러개도 가능
  • 일부 교체/수정 가능

2. 이미지를 만들 수 있다

  • 이미지를 직접 만들고 배포 가능
  • 이미지를 내려받아 컨테이너 사용 가능
  • 교체/업데이트가 쉬움
    ➡️ 이동성이 좋음

3. 컨테이너에 커널을 포함시킬 필요가 없다

  • 가벼움

도커의 장점과 단점

서버 관리의 관점에서 도커의 장/단점을 알아보자.
도커의 장점은 '여러개', '이동성', '생성', '보안' 이라는 4가지 키워드로 나타낼 수 있다.

✔️ 도커의 장점

1. 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.

  • 격리된 환경을 제공하므로 각각이 안전한 상태로 실행
  • 같은 소트웨어를 여러개 실행하는 것도 가능
  • 물리서버의 운영체제에 의존하므로, 가상화 기술에 비하면 가벼움

2. 서버 관리가 용이하다.

  • 소프트웨어가 독립된 환경에 격리되어 있으므로 업데이트가 간단함
  • 컨테이너 교체나 수정이 쉬워 환경 이전이 쉬움

3. 서버 고수가 아니어도 다루기 쉽다.

  • 명령 한 줄 만으로 서버 구축이 끝남

✔️ 도커의 단점

1. 리눅스용 소프트웨어밖에 지원하지 않는다.

  • 리눅스 운영체제를 사용하는 기술이기 때문

2. 호스트 서버 문제가 생기면 모든 컨테이너에 영향을 미친다.

  • 물리 서버 한 대에 여러 대의 서버를 띄우는 형식

3. 컨테이너 하나를 장기간에 걸쳐 사용할 경우 큰 장점을 느끼기 어렵다.

  • 컨테이너를 여러 개 사용하는 형태를 가정하기 때문
  • 컨테이너 하나에 도커 엔진 구동? ➡️ 단순한 오버헤드에 지나지 않음

도커의 주 용도

✔️ 팀원 모두에게 동일한 개발환경 제공

  • 개발 환경에서 팀원 모두에게 동일한 개발환경을 제공할 수 있음
  • 개발 환경과 운영 환경의 차이가 근본적으로 사라짐

✔️ 새로운 버전의 테스트

  • 격리된 환경을 이용해 운영체제나 라이브러리 등 새로운 버전을 먼저 개발환경에서 테스트한 후 운영 환경에 적용 가능
  • 변경된 환경에 대한 테스트에도 유용

✔️ 동일한 서버가 여러대 필요한 경우

  • 컨테이너 밖과 독립된 성질을 이용해 동일한 서버가 여러 대 필요한 경우에도, 한 대의 물리 서버에 똑같은 서버를 여러개 만들 수 있음
  • 관리가 간편해지고, 비용 절약 가능

참고 자료1
참고 자료2

profile
Backend Developer

1개의 댓글

comment-user-thumbnail
2023년 2월 21일

안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?

클리앙 : https://www.clien.net/service/board/park/17797443

연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.

협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.

sungjh0726@naver.com

협찬제품 링크 : https://incatos.shop/surl/P/11

답글 달기