LainyZine: 프로그래머 가이드 🐣

Docker Hub와 Docker 공식 이미지의 이해

Docker HubDocker에서 운영하는 Docker 이미지 저장소 서비스입니다. Docker는 리눅스 컨테이너를 관리하는 도구로 미리 만들어진 Docker 이미지를 사용해 개발 환경을 구축하거나 애플리케이션을 손쉽게 실행할 수 있습니다. Docker Hub에는 수많은 Docker 이미지가 업로드되어있으면 docker 클라이언트와 기본적으로 연동되어있습니다. 이러한 Docker 이미지를 저장하는 원격 스토리지를 Image Registry라고 부르며, Docker Hub는 Docker의 기본이자 공식 Image Registry입니다. 예를 들어 다음 명령어를 실행하면 자동적으로 Docker Hub의 nginx:latest 이미지를 풀 받고 실행합니다.

$ docker run -it -p 80:80 nginx:latest

너무 자연스러워서 사용자는 Docker Hub라는 게 존재하는지 모를 수도 있습니다. 하지만 Docker 이미지를 제대로 활용하려면 Docker Hub를 이해하고, Docker Hub 이미지 저장소의 정보를 이해할 수 있어야합니다. 이 글에서는 Docker Hub를 함께 둘러보면서 이미지 정보를 알아보고, 이미지 저장소와 공식 이미지에 대해서 소개합니다.

Docker Hub 둘러보기

아래 링크로 Docker Hub에 접속할 수 있습니다.

이미지를 직접 올리려는 게 아니면 지금 회원가입을 할 필요는 없습니다. 익명 사용자의 경우 단기간에 많은 이미지를 풀 받는 등의 작업에 제한이 생기기는 했지만, 일반적인 작업에 영향을 받는 정도는 아닙니다. Docker Hub 계정 생성에 대해서는 다음 글에서 소개합니다.

Docker Hub의 가장 중요한 기능은 왼쪽 상단의 검색 창입니다. 어떤 이미지를 사용할 때는 무작정 docker 명령어부터 실행하기보다는 먼저 해당 이미지의 정보를 Docker Hub에서 확인하는 것을 추천합니다.

Docker Hub 웹 사이트

우측 상단에는 Explore 메뉴도 있습니다. 이 메뉴를 통해서 어떤 이미지가 있는지 둘러볼 수도 있습니다. 여기서는 Explore 메뉴로 이동해보겠습니다.

Docker Hub의 Explore 페이지

위의 스크린샷에서 확인할 수 있듯이 Docker Hub에는 2021년 8월 기준 무려 8,297,936개의 이미지가 업로드되어있습니다 😲.

Docker Hub에는 누구나 이미지를 업로드할 수 있습니다. Docker를 조금 사용해보면 알 수 있지만 Docker 이미지는 리눅스에 대한 이해가 있다면 누구나 만들어 볼 수 있습니다. 누구나 만들 수 있기 때문에 만들어진 이미지를 편리하게 사용할 수도 있습니다만, Docker 이미지가 만들어지는 방법에 대한 이해나 정보가 없다면 보안 위험이 발생할 수 있습니다. 따라서 공식 이미지(Offcial Images), 인증된 퍼블리셔(Verified Publisher)의 이미지나 자신이 직접 만든 이미지만 사용하는 것을 강력히 권장합니다.

Explore 메뉴 좌측의 사이드바로 여러가지 필터를 적용해볼 수 있습니다. Verified Publisher와 Official Images 필터를 활성화하면 이미지 수가 5,243개로 줄어듭니다. Verified Publisher는 파란색 마크, Official Image는 초록색 마크가 붙어 있는 것을 확인할 수 있습니다. 이 중 Docker 공식 이미지는 168개입니다.

인증된 퍼블리셔(Verified Publisher)와 공식 이미지(Official Images) 필터

Official Images, 카테고리: Application Infrastrucutre로 필터해보면 상단에 node와 nginx 이미지가 나타납니다.

필터로 Nginx 공식 이미지를 찾아봅니다

nginx 이미지를 클릭해서 상세 페이지로 이동합니다. 여기서는 Nginx 공식 이미지를 예제로 이미지 저장소에 대해서 좀 더 자세히 살펴보겠습니다.

Nginx 공식 Docker 이미지 둘러보기

이 페이지를 Docker Hub의 이미지 저장소(Image Repository) 페이지라고 부릅니다. Git을 사용한다면 저장소(Repository)라는 표현이 익숙할 텐데, Docker는 여러가지 용어들을 Git에서 차용하고 있습니다. 예를 들어 이미지를 다운로드 받는다고 하지 않고 풀(Pull) 받는다고 하며, 이미지를 업로드한다고 하지 않고 푸시(Push)한다고 표현합니다.

nginx 이미지의 기본 정보

docker 명령어로 손쉽게 공식 이미지를 사용할 수 있지만, 어떤 이미지를 사용하기 전에 Docker Hub의 이미지 저장소부터 방문해보는 것이 좋습니다. 먼저 Nginx 페이지 상단에서 이름, 공식 이미지(Official Image) 여부, 다운로드 수, pull 명령어 등 기본 정보를 확인할 수 있습니다. 그 아래로는 Description, Reviews, Tags 탭이 있습니다.

이미지의 태그 목록 및 주요 태그

먼저 Tags 탭으로 이동해보겠습니다. 하나의 저장소는 하나의 이미지만 저장하는 공간이 아닙니다. 같은 저장소에도 태그로 구분된 여러 개의 이미지를 푸시(업로드)하는 것이 가능합니다. Git의 태그나 브랜치 기능이라고 생각해볼 수 있습니다.

실제로는 훨씬 더 많은 태그가 있습니다만, 아래 스크린샷에서는 latest 태그와 stable-alpine-perl 태그에 대한 정보를 확인할 수 있습니다.

Nginx 이미지의 latest와 stable-alpine-perl 태그

더 나아가 하나의 태그에도 CPU 아키텍처 별 이미지들이 별도로 제공되기 때문에 실제로 저장소에는 태그 수보다도 더 많은 이미지들이 있습니다. 기본적으로 docker 명령어가 현재 사용중인 아키텍처를 자동으로 인식하기 때문에 사용에 큰 문제는 없습니다만, 자세한 내용이 궁금하다면 다음 글을 참고해주세요.

이제 Description 탭으로 이동해봅니다. 여기에는 이미지에 대한 추가 정보와 사용법이 담겨있습니다. 이 페이지는 오픈소스 프로젝트들의 README 페이지와 같은 역할을 합니다. 형식이 정해져있는 게 아니기 때문에 자세하게 설명이 되어있는 경우도 있고, 내용이 없는 경우도 있습니다. 공식 이미지는 이 내용이 비교적 잘 정리되어있는 편입니다.

특히 수없이 많은 태그 중에서도, 해당 이미지에서 가장 많이 사용되는 태그가 정리되어있기 때문에 이를 참고하면 편리합니다.

Nginx 이미지의 주요 태그들

태그 목록을 보는 방법은 다음과 같습니다.

예를 들어 1.21 최신 버전이 설치되어있는 alpine 베이스의 경량 이미지를 사용하고 싶다면 nginx:1.21-alpine 태그를 사용합니다.

공식 이미지는 대개 비슷한 규칙에 의해 주요 태그 목록이 나열되어있습니다. 다음은 Ubuntu 이미지의 주요 태그 목록입니다.

Ubuntu 이미지의 주요 태그들

Docker를 잘 사용하려면, 무조건 latest를 사용하기보단 Description 내용을 참고해 목적에 따라서 태그를 선택해보는 연습이 필요합니다.

퀵 레퍼런스(Quick reference)

다음으로 퀵 레퍼런스 섹션이 이어집니다. 퀵 레퍼런스 섹션은 문서 앞뒤로 분리되어있을 수도 있습니다. 여기에서는 다음과 같은 정보를 확인할 수 있습니다.

공식 이미지 설명의 퀵 레퍼런스 섹션

이미지 사용법(How to use this image)

이어지는 내용에는 Nginx 서버에 대한 설명과 기본적인 사용법이 담겨 있습니다. docker 명령어로 이미지를 무작정 사용한다면 실제로 이미지가 어떻게 구성되어있는지, 포트는 몇 번이 열려있고, 실행 파일은 어디에 있는지, 어떻게 사용하는지 알기가 어렵습니다.

예를 들어 Nginx 서버로 정적 파일(static content)을 서빙하고 싶을 때 정적 파일을 어느 디렉터리에 어떻게 넣어야하는지 알기가 쉽지 않습니다만, 이미지 저장소 페이지를 자세히 보면 해당 내용이 찾을 수 있습니다.

nginx 이미지 사용 방법

이 내용을 통해 /usr/share/nginx/html 디렉터리를 사용하면 된다는 것과 명령어 예제를 확인할 수 있습니다. 이외에도 환경변수 설정 및 다양한 시나리오에 대한 사용법이 나와있습니다.

단, 이미지 설명이 모든 사용법을 다룬 매뉴얼은 아닙니다. 이미지에 대한 더 자세한 내용이 궁금하다면 Dockerfile을 직접 살펴봐야하며, 이미지 포함된 애플리케이션에 대한 이해도 필요합니다. 하지만 이 파일에서도 많은 힌트를 얻을 수 있습니다.

여기까지 Nginx 공식 이미지를 같이 살펴보면서 Docker Hub에 대해서 알아보았습니다.

FAQ: 공식 이미지(Official Image)는 정말 안전한가요?

공식 이미지에 대한 더 자세한 정보는 아래 공식 문서에서 확인할 수 있습니다.

Docker, Inc. sponsors a dedicated team that is responsible for reviewing and publishing all content in the Official Images. This team works in collaboration with upstream software maintainers, security experts, and the broader Docker community.

공식 문서에서 안내하고 있듯이, Docker 공식 이미지는 Docker 팀에서 소프트웨어 메인테이너, 보안 전문가, Docker 커뮤니티와 협업해서 최종적으로 업로드(Publish)한 이미지입니다. 또한 GitHub에서 공개적으로 오픈소스로 관리되고 있으며, 사용자들이 직접 공식 이미지 생성 과정을 재현해보는 것도 가능합니다.

official-images 저장소의 README에도 공식 이미지에 대한 더 자세한 정보가 있으니 참고해주세요.

FAQ: Docker는 정말 Docker Hub를 사용중인가요?

Docker가 정말 Docker Hub를 사용하는지 궁금할 수도 있습니다. 이를 확인하려면 docker info 명령어를 실행해보면 됩니다.

$ docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
...
 Registry: https://index.docker.io/v1/
...

출력 결과에서 Server 쪽 정보를 보면 Registry 항목이 있습니다. 여기서 index.docker.io이 Docker Hub의 예전 이름입니다. 이 주소로 접속해보면 실제로 Docker Hub 서비스로 연결됩니다.

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.