Docker란 무엇인가?

조시현·2021년 12월 9일
0

Docker

목록 보기
1/1
post-thumbnail

제가 docker을 사용하면서 docker에 대해서 정확히 더 알고 싶어서 조사를 해보게 되었습니다.

위키백과에서는 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.

즉, 도커 컨테이너는 소프트웨어의 실행에 필요한 모든 것을 포함하는 것이 컨테이너이며 도커는 Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이고 기존에 사용하던 컨테이너 기술을 사용하기 편하게 패키징한 도구입니다.
도커를 사용하는 이유는 실행 중인 환경에 관계 없이 언제나 동일하게 실행 될 것은 보증한다는 것입니다.

Docker는 VS Code, CircleCI 및 GitHub를 포함하여 사용하는 모든 개발 도구와 함께 작동합니다.
(CircleCI는 처음 듣는데 다음에 한번 찾아봐야겠습니다)

Container란?

Docker는 코드를 실행하는 표준 방식을 제공합니다. Docker는 컨테이너를 위한 운영 체제입니다. 가상 머신이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거) 컨테이너는 서버 운영 체제를 가상화합니다. 그리그 Docker는 각 서버에 설치되며 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령을 제공합니다.

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 하나지만 기존방식과는 차이가 있습니다.기존의 가상화 방식은 주로 OS를 가상화하였습니다.

이 방식은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다. 간단하게 이야기해서 각각의 가상머신이 OS를 자체적으로 가지고 있기 때문에 OS를 가상머신 이미지에 포함해야 하고, 배포이미지의 용량이 커지게 된다는 단점이 있다.

하지만 Docker의 container 기술을 사용하면 OS레벨은 공유하며고 어플리케이션 레벨에서는 각각의 어플리케이션을 격리해서 실행 할 수 있습니다. 그래서 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행할수 있습니다. 그리고 실행중인 컨테이너에 접속하여 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있습니다.

Image 란?

Docker에서 Image는 컨테이너를 정의하는 읽기 전용 템플릿입니다. 설명하자면 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable). 그렇기 때문에 언제든지 이 이미지를 이용한다면 동일한 컨테이너를 만들 수 있는 것입니다.
만약 컨테이너 안에서 변경된 내용이 이미지에 영향을 주게 된다면 우리는 항상 동일한 값을 가진 컨테이너를 만들 수 없게 됩니다.

혹시 파일이나 설정을 변경하고 싶다면?
기존에 있던 이미지를 실행시키고, 만들어진 컨테이너안에서 추가하거나 삭제하고 변경된 내용을 새로운 이미지로 만들어내면 됩니다.

즉, 이미지를 변경하고 싶다면 새로운 이미지를 만들어야 합니다.

컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.

이런 image들은 도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있습니다.

그럼 지금까지는 Docker가 무엇인가를 알아봤고, 이제는 왜 사용하는지(장점)에 대해서 알아보겠습니다.

  1. 빠른 시작과 종류 - 가상환경이 커널에서 공유되기 떄문에 시작 할때 초기화 작업의 필요가 없다.

  2. 높은 집적도 - 컨테이너는 커널이 직접 프로세스를 조작하여 분리된 공간을 구성하기 때문에 PC상에서 작동하는 OS는 하나이다. 여러개의 컨테이너를 실행 중이라고 하여도 OS는 하나이기 때문에 가상머신에 비해서 고밀도가 가능하며 실행 중인 프로세스를 위한 메모리만 필요하므로 낮은 사양의 환경에서도 동작이 가능하다.

  3. 낮은 오버헤드 - 가상화를 위한 하드웨어 애뮬레이트가 낮다.
    오버헤드란 ? 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.
    애뮬레이트란? 컴퓨터 프로그램 또는 전자기기의 능력

  4. 운영 표준화 - 작은 컨테이너식 애플리케이션을 사용하면 손쉽게 배포하고, 문제를 파악하고 수정을 위해 롤백할 수 있다.

  5. 원활한 이전 - Docker 기반의 애플리케이션 로컬 개발 시스템에서 AWS으 ㅣ프로덕션 배포로 원활하게 이전이 가능하다.

  6. 비용 절감 및 빠른 서비스 제공

출처: https://jeongupark-study-house.tistory.com/76

https://velog.io/@meong9090/docker%EB%8F%84%EC%BB%A4%EB%9E%8
0-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

https://jeongupark-study-house.tistory.com/76

profile
노력하는 개발자

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

답글 달기