Docker 이해하기
Docker환경으로의 Migration을 위해서 주어진 과제를 하나씩 해결하며 학습한다.
- 해당 내용은 학습을 목적으로 공부한 내용을 정리한 내용입니다. 글의 내용을 100% 신뢰하기보다는 참조만 해주세요.
학습목표
다음과 같은 질문에 답 할 수 있다.
- 도커란 무엇인가?
- 도커를 사용하면 어떠한 장점이 있는가?
- 이미지와 컨테이너 차이는?
- Docker Hub는 무엇인가?
- 나중에 서비스를 만들 때 필요한 이미지가 있으면 Docker Hub에서 가져온다고 가정하자, 이때 주의해야 되는 부분이 있을까요? (ex, 보안)
학습내용
Docker란 무엇인가?
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code, you can significantly reduce the delay between writing code and running it in production.
위에 내용은 Docker 공식 홈페이지에 작성되어 있는 개요입니다. 해당 내용을 나만의 방식으로 다시 재 해석하면 이전시간에 학습했던 “Container들을 종합적으로 관리해주는 개방형 플랫폼” 정도로 해석 할 수 있습니다. 그렇다면 정확히 Docker가 어떤식으로 COntainer들을 관리하는지 Docker architecture에 대해서 간단히 알아보고자 합니다.
해당 이미지는 Docker architecture에 대해서 나타내고 있는 사진 입니다. 해당 내용을 “Client”, “Docker Host”, “Registry”로 나누어 설명해 보고자 합니다.
Client
Docker Host 부분과 상호작용 하는 부분 입니다. “docker run”, “docker build”, “docker pull” 등의 명령어를 통해 Docker의 상태를 관리 합니다.
Docker Host
크게 Docker demon, Images, Containers로 이루어져 있습니다. Docker demon은 Clinent에서 발송된 API 요청을 수신 합니다. 또한 네트워크 및 볼륨, Images와 Containers를 통합해서 관리 하는 역할도 수행하고 있습니다. Images와 Containers차이는 추후 자세히 다루도록 하겠습니다.
Registry
Docker image를 사용자들 끼리 공유할 수 있도록 하는 플랫폼 입니다. 크게 Public과 Private Registry로 나뉘는데 Public의 대표적인 예시가 Docer Hub가 있으며, Private은 통상적으로 기업에서 자체 서버에 적재되는 형태로 저장됩니다.
Docker Hub
Docekr Hub에 대해서 좀 더 자세히 말해보고자 합니다. Docker에서 운영하는, Docker 이미지를 위한 저장소 서비스입니다. Docker Hub에는 다양한 Docker 이미지가 업로드되어 있으며, 이는 docker 클라이언트와 자동 연동되어 원활한 사용을 보장합니다. 이러한 Docker 이미지를 저장하는 원격 저장소를 Image Registry라 칭하며, Docker Hub는 Docker의 공식 및 주요한 Image Registry로 활용됩니다.
그렇다면 Docker에서 사용자들이 편하게 사용하도록 Image를 미리 저장해 놨으니 저희는 단순히 Docker Hub에서만 Image를 들고 와서 Container를 구축하면 되는 걸까요? 저는 이러한 측면에서 Docker Hub를 사용하여 웹 서버를 구축했을 때의 단점을 고민해 보았고 다음과 같은 유의사항을 생각해 냈습니다.
보안상 문제 :
만약 Attacker가 악성 Docer Image를 만들어 Docker Hub에 배포를 하고 있었다고 가정을 해봅시다(여기서 악성 Docer Image란 악성코드, 취약한 소프트웨어, 해킹 관련 도구 등 악의적으로 사용될 만한 요소들이 포함된 Docer Image를 말한다). 사용자는 아무 의심 없이 Docker Hub를 통해 Image를 다운로드할 것이고 그로 인하여 암호화폐 채굴, DOS 공격 등의 다양한 이슈가 생길 수도 있습니다.유료화 문제 :
Public 환경에 의존하는 서비스의 고질적인 단점이라고 생각합니다. 현재는 Docker Hub를 무료로 사용할 수 있지만 언제 유료화가 될지 모르기 때문에 이에 대한 대응책은 항상 생각해야 합니다. 실제로 2020년 11월 20일에 Docker Hub 정책이 변경되었습니다. | 기준 | 제한 내용 | |:–:|:–:| | docker login 없이 요청 익명 User | IP 기반으로 확인, 6시간동안 100회 요청 | | free user | 계정 기반으로 확인, 6시간동안 200회 요청 | | Pro, Team user | 제한 없음 | 현재는 무료로 쓰기 나쁘지 않은 정도지만 대체재를 생각해놓지 않는다면 Docker Hub 측 가격 정책에 휩싸이기 쉽다 생각합니다.
이렇듯 Docker Hub는 훌륭한 Image Registry임에도 불구하고 다양한 문제를 일으킵니다. 만약 Docker Hub를 사용해야 할 상황이 온다면 아래의 행동을 꼭 명심한다면 위 와 같은 문제에 좀 더 안전할 것이라 생각합니다.
- 신뢰성 있는 Docker Image 사용
- Docker Scan 사용
- 동적 분석 프레임 워크 사용
- 적절한 Private 환경의 Image Registry 구축
Image VS Container
단순히 Docker를 공부할 때 두가지의 차이는 Image가 단순히 여러개 모여 Container를 이루는 것이라 생각했습니다. 그래서 Image와 Container의 차이는 없다라고 느껴졌는데 두가지에는 “불변”이라는 속성에서 큰 차이를 두고 있었습니다.
Image는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있습니다. 그래서 상태값을 가지지 않고 변하지 않으며 이러한 Image의 실행상태를 Container로 볼 수 있습니다. 이런 개념이면 한번 Image를 생성해서 실행 시키면 변경할 수 없는게 아닌가? 라는 의문이 생길 수 있는데 실행 상태에서 추가되거나 변경되는 값은 Container에 저장됩니다. 또한 같은 Image에서 여러개의 Container를 생성할 수 있다는 특징도 가지고 있습니다.
답변
- 도커란 무엇인가?
A: Container들을 종합적으로 관리해주는 개방형 플랫폼
- 도커를 사용하면 어떠한 장점이 있는가?
A: 가상 환경과 비교했을 때 가벼운 가상화 기술을 재공하며, 다양한 OS를 다룰 수 있다.
- 이미지와 컨테이너 차이는?
A: Image는 불변의 속성을 가지고 있고 Container는 가변의 속성을 가지고 있다.
- Docker Hub는 무엇인가?
A: Docker에서 운영하는, Docker 이미지를 위한 저장소 서비스.
- 나중에 서비스를 만들 때 필요한 이미지가 있으면 Docker Hub에서 가져온다고 가정하자, 이때 주의해야 되는 부분이 있을까요? (ex, 보안)
A: 아무런 검증없는 Image를 Docker Hub에서 받아오게 된다면 악성 Image를 받아 올 가능성이 생기고 Attacker에게 공격 받을 위기에 놓일 수 있다.
참조
[1] 박건현. “도커 및 컨테이너 학습을 위한 학습 플로우.” Received by 김덕중, 12 Mar. 2023.
[2] “Docker Overview.” Docker Documentation, 9 Apr. 2020, docs.docker.com/get-started/overview/. Accessed 25 Aug. 2023.
[3] 길민권. “도커 허브 컨테이너 이미지 50% 이상, 심각한 취약점 포함…잠재적 위협.” 데일리시큐, 6 Dec. 2020, www.dailysecu.com/news/articleView.html?idxno=118045. Accessed 25 Aug. 2023.
[4] ACCORDION. “Docker Hub 속도 및 요청 제한.” Accordions.co.kr, 2023, accordions.co.kr/it_trend/docker-hub-%EC%86%8D%EB%8F%84-%EB%B0%8F-%EC%9A%94%EC%B2%AD-%EC%A0%9C%ED%95%9C/. Accessed 25 Aug. 2023.