docker login 명령어를 사용하여 레지스트리에 인증하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker login 명령을 사용하여 Docker 레지스트리에 인증하는 방법을 배우게 됩니다. 표준 웹 기반 로그인을 사용하여 Docker Hub 에 인증하는 방법, 사용자 이름과 비밀번호를 사용하여 자체 호스팅 레지스트리에 인증하는 방법, 그리고 비대화형 시나리오를 위해 STDIN 을 통해 비밀번호를 제공하는 방법을 다룰 것입니다. 이 실습을 통해 다양한 Docker 레지스트리 환경에서 이미지를 안전하게 액세스하고 관리하는 데 필요한 필수 기술을 습득할 수 있습니다.

웹 기반 로그인을 사용하여 Docker Hub 에 인증

이 단계에서는 웹 기반 로그인 방식을 사용하여 Docker Hub 에 인증하는 방법을 배우게 됩니다. 이는 Docker Hub 에 로그인하는 가장 일반적인 방법이며 대화형 세션에 적합합니다.

Docker Hub 는 Docker 에서 제공하는 클라우드 기반 레지스트리 서비스로, Docker 이미지를 저장하고 공유할 수 있도록 해줍니다. 개인 이미지를 푸시하거나 풀하려면 Docker Hub 에 인증해야 합니다.

docker login 명령은 Docker 레지스트리에 인증하는 데 사용됩니다. 기본적으로 Docker Hub 에 인증합니다.

LabEx 환경에서 터미널을 엽니다. ~/project 디렉토리에 있습니다.

Docker Hub 에 로그인하려면 다음 명령을 실행합니다.

docker login

이 명령을 실행하면 Docker Hub 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_docker_username
Password: your_docker_password

메시지가 표시되면 Docker Hub 사용자 이름과 비밀번호를 입력합니다. 인증에 성공하면 다음과 유사한 메시지가 표시됩니다.

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

이 메시지는 Docker Hub 에 성공적으로 로그인했음을 나타냅니다. 암호화되지 않은 비밀번호에 대한 경고는 이 시나리오에서 예상되는 것이며 이 랩에서는 무시해도 됩니다.

이제 로그인했으므로 Docker Hub 에서 개인 이미지를 풀거나 자체 이미지를 리포지토리에 푸시할 수 있습니다.

Docker 명령이 로그인 후 작동하는지 확인하기 위해 공개 이미지를 풀려고 합니다. 테스트에 사용되는 작은 이미지인 hello-world 이미지를 풀 것입니다.

docker pull hello-world

이미지가 풀리고 추출되고 있음을 나타내는 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이는 인증 후 Docker Hub 와 상호 작용할 수 있음을 확인합니다.

사용자 이름과 비밀번호로 자체 호스팅 레지스트리에 인증

이 단계에서는 사용자 이름과 비밀번호를 사용하여 자체 호스팅 Docker 레지스트리에 인증하는 방법을 배우게 됩니다. Docker Hub 가 기본 레지스트리이지만, 조직 내 또는 클라우드 제공업체에서 호스팅되는 개인 레지스트리와 상호 작용해야 할 수 있습니다.

자체 호스팅 레지스트리는 Docker Hub 와 같은 공용 서비스를 사용하는 대신 직접 설정하고 관리하는 Docker 레지스트리입니다. 이는 보안, 규정 준수 또는 성능상의 이유로 자주 수행됩니다.

자체 호스팅 레지스트리에 인증하려면 동일한 docker login 명령을 사용하지만 레지스트리의 주소를 지정해야 합니다. 형식은 docker login <registry_address>입니다.

이 랩에서는 자체 호스팅 레지스트리를 시뮬레이션합니다. 자리 표시자 주소 myregistry.local을 사용합니다. 실제 시나리오에서는 레지스트리의 실제 도메인 이름 또는 IP 주소가 됩니다.

~/project 디렉토리에서 터미널을 엽니다.

시뮬레이션된 자체 호스팅 레지스트리에 로그인하려면 다음 명령을 실행하고, your_registry_usernameyour_registry_password를 해당 레지스트리에 사용할 가상의 자격 증명으로 바꿉니다.

docker login myregistry.local

myregistry.local 레지스트리의 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.

Login with your Docker ID to push and pull images from myregistry.local. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_registry_username
Password: your_registry_password

가상의 사용자 이름과 비밀번호를 입력합니다. myregistry.local은 이 환경에서 실제 실행 중인 레지스트리가 아니므로 로그인이 레지스트리에 연결할 수 없거나 인증에 실패했다는 오류 메시지와 함께 실패할 가능성이 높습니다. 이는 이 시뮬레이션에서 예상되는 동작입니다. 중요한 부분은 명령 구문과 다른 레지스트리를 지정하는 프로세스를 이해하는 것입니다.

Error response from daemon: Get "http://myregistry.local/v2/": dial tcp: lookup myregistry.local on 127.0.0.53:53: no such host

레지스트리가 존재하지 않아 로그인이 실패했지만, 자체 호스팅 레지스트리에 인증을 시도하는 데는 docker login <registry_address> 명령 구문이 올바릅니다.

실행 중인 자체 호스팅 레지스트리가 있는 실제 시나리오에서는 로그인에 성공하면 "Login Succeeded" 메시지가 표시되고 해당 특정 레지스트리에 대한 자격 증명이 Docker 구성 파일 (~/.docker/config.json) 에 저장됩니다.

레지스트리 정보가 저장되는 방식을 확인하기 위해 Docker 구성 파일을 살펴보겠습니다.

cat ~/.docker/config.json

JSON 구조를 볼 수 있습니다. 이전 단계에서 Docker Hub 에 성공적으로 로그인한 후에는 https://index.docker.io/v1/에 대한 항목이 표시됩니다. myregistry.local에 성공적으로 로그인했다면 해당 레지스트리 주소에 대한 추가 항목이 표시됩니다.

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "..."
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/..."
  },
  "credsStore": "desktop"
}

auths 섹션에는 로그인한 다양한 레지스트리에 대한 인증 정보가 포함되어 있습니다. auths의 각 키는 레지스트리 주소이고, 값에는 인증 세부 정보가 포함되어 있습니다.

이 단계에서는 docker login을 사용할 때 자체 호스팅 레지스트리 주소를 지정하는 방법을 보여주었습니다.

비대화형 로그인을 위해 STDIN 을 사용하여 비밀번호 제공

이 단계에서는 표준 입력 (STDIN) 을 사용하여 Docker 레지스트리 비밀번호를 제공하는 방법을 배우게 됩니다. 이 방법은 프롬프트가 표시될 때 수동으로 비밀번호를 입력할 수 없는 스크립팅 또는 자동 배포와 같은 비대화형 시나리오에 특히 유용합니다.

대화형 터미널에서 docker login을 사용하면 비밀번호를 묻는 메시지가 표시됩니다. 그러나 스크립트에서는 수동 개입 없이 비밀번호를 전달하는 방법이 필요합니다. --password-stdin 플래그를 사용하면 STDIN 에서 비밀번호를 읽을 수 있습니다.

중요한 보안 참고 사항: 명령줄에서 직접 비밀번호를 전달하는 것은 일반적으로 안전하지 않습니다. 명령과 인수가 프로세스 목록 (ps) 또는 셸 기록에 표시될 수 있기 때문입니다. STDIN 에서 비밀번호를 읽는 것은 이러한 위치에서 비밀번호가 노출되는 것을 방지하므로 스크립팅에 더 안전한 접근 방식입니다.

~/project 디렉토리에서 터미널을 엽니다.

이를 시연하기 위해 STDIN 을 사용하여 Docker Hub 에 로그인하는 것을 시뮬레이션합니다. Docker Hub 사용자 이름과 비밀번호가 필요합니다.

명령 구조는 비밀번호를 에코하고 이를 docker login --username <your_docker_username> --password-stdin으로 파이프하는 것입니다.

your_docker_username을 실제 Docker Hub 사용자 이름으로, your_docker_password를 실제 Docker Hub 비밀번호로 바꿉니다.

echo "your_docker_password" | docker login --username your_docker_username --password-stdin

이 명령을 실행하면 성공적인 로그인을 나타내는 다음과 유사한 출력이 표시됩니다.

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

다시 한 번, 암호화되지 않은 비밀번호에 대한 경고는 이 랩 환경에서 예상되는 것입니다.

이 방법은 인증이 필요한 Docker 작업을 자동화하는 데 매우 중요합니다. 예를 들어 CI/CD 파이프라인에서 Docker Hub 자격 증명을 환경 변수로 저장하고 이 방법을 사용하여 이미지를 빌드하고 푸시하기 전에 로그인할 수 있습니다.

또한 이 방법을 사용하여 명령 끝에 레지스트리 주소를 추가하여 자체 호스팅 레지스트리에 로그인할 수 있습니다.

echo "your_registry_password" | docker login myregistry.local --username your_registry_username --password-stdin

이전 단계와 마찬가지로, myregistry.local이 실행 중인 레지스트리가 아니기 때문에 이 명령은 이 랩에서 실패할 가능성이 높습니다. 그러나 특정 레지스트리에 대해 STDIN 을 통해 비밀번호를 제공하는 구문은 올바릅니다.

이 단계에서는 --password-stdin 플래그를 사용하여 비밀번호를 docker login 명령으로 파이프하여 Docker 레지스트리에 비대화형 로그인을 수행하는 방법을 보여주었습니다.

요약

이 랩에서는 docker login 명령을 사용하여 Docker 레지스트리에 인증하는 방법을 배웠습니다. 먼저, 표준 대화형 웹 기반 로그인 방식을 사용하여 Docker Hub 에 인증하는 연습을 했습니다. 프롬프트가 표시되면 사용자 이름과 비밀번호를 제공했습니다. 이는 기본 Docker 레지스트리에 로그인하는 기본 프로세스를 보여주었습니다.

그런 다음 레지스트리 URL 과 사용자 이름 및 비밀번호를 지정하여 자체 호스팅 레지스트리에 인증하는 방법을 살펴보았습니다. 마지막으로, 비대화형 시나리오 및 스크립팅에 더 안전한 방법인 STDIN 을 사용하여 비밀번호를 제공하는 방법을 배웠습니다. 이를 통해 명령 기록이나 로그에 비밀번호가 노출되는 것을 방지할 수 있습니다. 이러한 단계는 이미지를 푸시하고 풀하기 위해 Docker 레지스트리에 대한 액세스를 보호하는 다양한 방법을 다루었습니다.