안녕하세요 펭귄 교수입니다.
벌써 10편에 도달했습니다!
이제부터는 Docker의 심화편에 들어가게 됩니다.
Docker는 컨테이너 기반의 애플리케이션을 배포하고 관리하는 효율적인 방법을 제공합니다.
개발자가 도커 이미지를 만들고 이를 공유하거나 배포할 수 있게 돕는 시스템이 바로 도커 레지스트리(Docker Registry)입니다.
도커 레지스트리는 도커 이미지를 저장하고 배포하는 서버입니다.
이미지를 업로드하고, 필요할 때 다시 다운로드할 수 있는 중앙 저장소 역할을 합니다.
이번 글에서는 도커 레지스트리가 무엇인지, 어떻게 설정하고 사용할 수 있는지, 로
컬 환경에서 레지스트리를 구축하고 관리하는 방법까지 살펴보겠습니다.
마지막으로 도커 허브와 같은 공개 레지스트리와 프라이빗 레지스트리 설정 방법도 자세히 설명하겠습니다.
1. Docker Registry란?
도커 레지스트리는 간단히 말해 도커 이미지를 저장하고 배포하는 저장소입니다. 도커 이미지는 특정 애플리케이션이나 서비스가 컨테이너로 실행되기 위한 환경과 코드를 담고 있는 패키지입니다. 이러한 이미지는 개발자들이 애플리케이션을 배포하는 데 필수적인 요소입니다.
도커 레지스트리의 주요 기능은 다음과 같습니다:
- 도커 이미지 저장: 도커 이미지를 로컬이나 원격 서버에 저장하고 관리합니다.
- 이미지 버전 관리: 같은 애플리케이션의 여러 버전의 이미지를 관리할 수 있습니다.
- 이미지 배포: 개발자가 이미지를 푸시하면, 다른 개발자나 시스템이 해당 이미지를 풀(Pull)하여 사용할 수 있습니다.
가장 널리 사용되는 도커 레지스트리는 도커 허브(Docker Hub)로, 전 세계의 수많은 개발자와 기업이 이미지를 공유하는 공개 레지스트리입니다. 도커 허브 외에도 GitLab, AWS ECR, Google Container Registry 등 여러 클라우드 제공자들이 자체 도커 레지스트리를 제공합니다.
2. 도커 허브(Docker Hub)
도커 허브는 도커에서 제공하는 가장 기본적인 퍼블릭 레지스트리입니다. 여기서 전 세계 사용자들은 도커 이미지를 업로드하거나 다운로드할 수 있으며, 도커 이미지를 공유하고 협업할 수 있습니다. 도커 허브는 기본적으로 공개되어 있지만, 프라이빗 이미지를 저장할 수 있는 유료 옵션도 제공합니다.
2-1. 도커 허브 사용법
도커 허브를 사용하기 위해서는 먼저 도커 계정이 필요합니다.
도커 계정이 있으면 도커 허브에 로그인하여 이미지를 업로드하고 관리할 수 있습니다.
도커 허브에 로그인하려면 다음 명령어를 사용합니다.
docker login
이 명령어를 실행하면 도커 허브 계정의 사용자명과 비밀번호를 입력해야 합니다.
로그인에 성공하면, 도커 CLI를 통해 도커 허브에서 이미지를 다운로드하거나 업로드할 수 있습니다.
2-2. 도커 허브에서 이미지 다운로드
도커 허브에서 이미지를 다운로드하려면 docker pull 명령어를 사용합니다. 예를 들어, Nginx 이미지를 다운로드하고 싶다면 다음과 같은 명령어를 실행합니다.
docker pull nginx
도커 허브에서 이미지를 다운로드하면 로컬 컴퓨터에 이미지가 저장되고, 이를 기반으로 컨테이너를 생성할 수 있습니다. 예를 들어, nginx 이미지를 기반으로 웹 서버 컨테이너를 생성하려면 다음 명령어를 실행합니다.
docker run -d -p 80:80 nginx
2-3. 도커 허브에 이미지 업로드
도커 이미지를 도커 허브에 업로드하려면 먼저 이미지를 빌드한 후, 도커 허브에 푸시(Push)해야 합니다. 다음은 간단한 예시입니다.
- 이미지 태그 지정: 먼저 이미지를 도커 허브에 푸시할 수 있도록 태그를 지정해야 합니다. 예를 들어, myapp이라는 이미지를 myusername/myapp이라는 이름으로 태그를 지정하려면 다음과 같이 명령어를 실행합니다.
- docker tag myapp myusername/myapp
- 이미지 푸시: 태그를 지정한 후, docker push 명령어를 사용하여 이미지를 도커 허브에 업로드합니다.
- docker push myusername/myapp
이 과정이 완료되면, 도커 허브에서 해당 이미지를 조회할 수 있으며, 다른 사용자나 시스템에서 이를 다운로드할 수 있습니다.
3. 프라이빗 도커 레지스트리 설정
도커 허브와 같은 퍼블릭 레지스트리를 사용하는 것이 편리하긴 하지만, 기업 내부에서만 사용할 이미지나 민감한 정보를 담은 이미지를 관리하려면 프라이빗 레지스트리를 설정하는 것이 좋습니다. 도커는 자체적으로 프라이빗 레지스트리를 운영할 수 있는 방법을 제공합니다.
3-1. 로컬 프라이빗 레지스트리 설정
도커는 registry라는 공식 이미지를 제공하며, 이를 통해 로컬 환경에서 프라이빗 도커 레지스트리를 쉽게 구축할 수 있습니다. 다음은 도커를 사용하여 프라이빗 레지스트리를 설정하는 간단한 방법입니다.
- 레지스트리 컨테이너 실행
이 명령어는 5000 포트에서 프라이빗 레지스트리를 실행하는 컨테이너를 생성합니다. 이제 이 레지스트리에 이미지를 저장하고, 필요할 때 가져올 수 있습니다.docker run -d -p 5000:5000 --name myregistry registry:2
- 먼저 도커의 공식 레지스트리 이미지를 다운로드하고 이를 실행합니다.
- 이미지 태그 변경
docker tag myapp localhost:5000/myapp
- 로컬 레지스트리에 이미지를 푸시하기 위해서는 해당 레지스트리 주소를 기반으로 이미지를 태그해야 합니다. 예를 들어, myapp이라는 이미지를 로컬 레지스트리에 푸시하려면 다음과 같이 태그를 지정합니다.
- 이미지 푸시
docker push localhost:5000/myapp
- 이제 태그가 변경된 이미지를 로컬 레지스트리에 푸시할 수 있습니다.
- 이미지 다운로드
docker pull localhost:5000/myapp
- 다른 시스템이나 로컬에서 해당 이미지를 다운로드하려면 docker pull 명령어를 사용합니다.
3-2. 프라이빗 레지스트리의 보안 설정
프라이빗 레지스트리를 운영할 때는 보안 설정이 중요합니다. 기본적으로 도커 레지스트리는 HTTPS를 사용하지 않고 실행되므로, 보안된 통신을 위해 SSL 인증서를 설정하는 것이 좋습니다. 인증서를 설정하는 방법은 공식 도커 문서를 참조하십시오.
4. 도커 레지스트리 활용 사례
도커 레지스트리를 사용하는 다양한 활용 사례를 살펴보겠습니다.
4-1. CI/CD 파이프라인에 레지스트리 통합
CI/CD(Continuous Integration/Continuous Delivery) 파이프라인에서는 코드가 변경될 때마다 자동으로 도커 이미지를 빌드하고, 이를 레지스트리에 푸시한 후, 스테이징 또는 프로덕션 환경으로 배포할 수 있습니다.
예를 들어, Jenkins, GitLab CI, CircleCI와 같은 도구들은 도커 이미지를 빌드한 후 이를 도커 허브나 프라이빗 레지스트리에 업로드하는 과정을 자동화할 수 있습니다. 이는 빠른 배포 주기를 유지하는 데 큰 도움이 됩니다.
4-2. 멀티 클라우드 배포
여러 클라우드 환경에서 애플리케이션을 실행하는 경우, 각 클라우드 제공자의 도커 레지스트리(Google Container Registry, AWS ECR 등)를 사용할 수 있습니다. 이를 통해 멀티 클라우드 환경에서 일관된 이미지를 배포하고 관리할 수 있습니다.
5. 도커 레지스트리 관련 명령어 정리
도커 레지스트리를 효율적으로 관리하기 위해 자주 사용하는 명령어들을 정리해 보겠습니다.
5-1. 이미지 푸시(Push)
도커 이미지를 도커 레지스트리로 푸시하는 명령어입니다.
docker push <레지스트리 주소>/<이미지 이름>
5-2. 이미지 풀(Pull)
도커 레지스트리에서 이미지를 다운로드할 때 사용하는 명령어입니다.
docker pull <레지스트리 주소>/<이미지 이름>
5-3. 레지스트리 로그 확인
로컬 프라이빗 레지스트리를 실행 중일 때, 레지스트리의 로그를 확인하려면 다음 명령어를 사용합니다.
docker logs myregistry
6. 마무리
도커 레지스트리는 도커 생태계에서 핵심적인 역할을 합니다. 이미지를 저장하고 배포하는 중앙 서버 역할을 하기 때문에, 개발자는 이를 활용해 협업을 하고, CI/CD 파이프라인을 효율적으로 관리할 수 있습니다.
도커 허브와 같은 퍼블릭 레지스트리를 사용할 수도 있지만, 민감한 데이터를 다루거나 사내 전용 이미지를 관리하려면 프라이빗 도커 레지스트리를 설정하는 것이 좋습니다.
프라이빗 레지스트리는 로컬 환경에서 쉽게 구축할 수 있으며, 이를 통해 안전하고 관리하기 쉬운 이미지 저장소를 운영할 수 있습니다.
'Docker > Docker 강의' 카테고리의 다른 글
[Docker 강의 12편] 도커 컨테이너와 포트 포워딩 (0) | 2024.09.29 |
---|---|
[Docker 강의 11편] 도커 이미지 푸시(Push) 및 풀(Pull) (0) | 2024.09.29 |
[Docker 강의 9편] 다중 컨테이너 환경 구축 (1) | 2024.09.25 |
[Docker 강의 8편] Docker Compose 란? (0) | 2024.09.25 |
[Docker 강의 7편] 도커 이미지 빌드 (0) | 2024.09.23 |