게으름을 위한 부지런한 게으름뱅리' 블로그

[Docker] Docker pull의 기본 원리 및 사설 registry 구축 및 pull 본문

IT/Docker

[Docker] Docker pull의 기본 원리 및 사설 registry 구축 및 pull

LazismLee 2024. 7. 15. 20:30
반응형

docker pull 명령어는 Docker에서 이미지를 다운로드하는 데 사용되는 기본적인 명령어입니다. Docker 이미지란 컨테이너를 생성할 때 필요한 모든 파일, 라이브러리, 설정 등이 포함된 패키지입니다. docker pull을 사용하면 Docker Hub 또는 다른 이미지 레지스트리에서 이미지를 가져올 수 있습니다.

 

다음은 docker pull 명령어의 사용법과 주요 옵션, 그리고 예시를 설명합니다.

기본 문법

docker pull [OPTIONS] IMAGE[:TAG|@DIGEST]

주요 옵션

  • -a, --all-tags : 모든 태그를 가져옵니다. 예를 들어, nginx 이미지의 모든 태그를 다운로드하려면 docker pull -a nginx를 사용할 수 있습니다.
  • --disable-content-trust : 컨텐츠의 신뢰성 검증을 비활성화합니다. 보안상의 이유로 기본적으로는 이 검증이 활성화되어 있습니다.

이미지와 태그

docker pull 명령어는 IMAGE[:TAG|@DIGEST] 형식으로 작성됩니다.

  • IMAGE : 가져오고자 하는 Docker 이미지의 이름입니다. 예를 들어 nginx, ubuntu, node 등이 있습니다.
  • TAG : 특정 버전의 이미지를 지정합니다. latest는 기본 태그로, 이미지의 최신 버전을 나타냅니다. 예: nginx:latest, ubuntu:20.04.
  • DIGEST : 이미지의 해시 값을 이용해 특정 이미지를 가져옵니다. 예: nginx@sha256:abc123....

예제

docker pull ubuntu			#가장 기본적인 사용

docker pull nginx:1.21			#특정 태그의 이미지 다운로드

docker pull -a nginx			#모든 태그의 이미지 다운로드 (비추천, 대량 다운로드)

docker pull nginx@sha256:abc123...			#해시 값으로 이미지 다운로드

docker pull --disable-content-trust nginx			#컨텐츠 신뢰성 검증 비활성화

docker pull의 작동 원리

  • 이미지 레지스트리와 통신: docker pull 명령어는 Docker Hub와 같은 이미지 레지스트리 서버에 요청을 보냅니다.
  • 메타데이터 요청: 레지스트리는 이미지의 메타데이터(태그, 레이어 등)를 반환합니다.
  • 이미지 다운로드: 요청된 이미지의 레이어를 다운로드합니다. 각 레이어는 이미지의 파일 시스템과 설정을 구성하는 부분입니다.
  • 이미지 저장: 다운로드한 이미지 레이어를 로컬 Docker 저장소에 저장합니다.
  • 이미지 검증: 다운로드한 이미지의 무결성을 검증합니다. --disable-content-trust 옵션을 사용하면 이 검증을 비활성화할 수 있습니다.

사설 레지스트리에서 Docker 이미지 가져오기

docker pull [REGISTRY_HOST[:PORT]/]REPOSITORY[:TAG|@DIGEST]

 

  • REGISTRY_HOST : 사설 레지스트리 서버의 호스트 이름 또는 IP 주소입니다. 예를 들어 myregistry.example.com 또는 192.168.1.100이 될 수 있습니다.
  • PORT : 사설 레지스트리 서버의 포트 번호입니다. 기본적으로 Docker 레지스트리는 포트 5000을 사용하지만, 설정에 따라 다를 수 있습니다.
  • REPOSITORY : 이미지 저장소의 이름입니다. 예를 들어 myapp, backend 등이 있습니다.
  • TAG : 이미지의 태그로, 버전이나 특정 상태를 지정합니다. 예를 들어 latest, v1.0, stable 등이 될 수 있습니다.
  • DIGEST : 이미지의 해시 값으로 특정 이미지를 명확하게 지정할 수 있습니다. 예: sha256:abc123....

사설 레지스트리에서 이미지 받기

docker pull myregistry.example.com/myapp:latest		#사설 레지스트리의 기본 포트와 주소로 이미지 다운로드

docker pull myregistry.example.com:5000/myapp:v1.0		#특정 포트를 사용하는 경우

docker pull myregistry.example.com/myapp@sha256:abc123...		#해시 값을 이용해 이미지 다운로드

 

사설 레지스트리 설정

사설 레지스트리를 설정할 때는 docker run 명령어로 레지스트리 컨테이너를 실행합니다. 기본적으로 다음과 같이 설정합니다.

docker run -d -p 5000:5000 --name myregistry registry:2

이 명령어는 기본 설정으로 5000 포트에서 레지스트리를 실행합니다. myregistry는 컨테이너의 이름이며, registry:2는 공식 Docker Registry 이미지의 버전 2를 사용합니다.

 

사설 레지스트리 접근 설정

{
  "auths": {
    "myregistry.example.com": {
      "username": "myuser",
      "password": "mypassword",
      "email": "myemail@example.com"
    }
  }
}

사설 레지스트리에 이미지를 푸시하거나 풀할 때는 인증이 필요할 수 있습니다. ~/.docker/config.json 파일에서 인증 정보를 설정할 수 있습니다.

이 설정은 docker login 명령어로도 할 수 있습니다.

docker login myregistry.example.com:5000

로그인 후에는 username, password, email을 입력하여 인증을 완료합니다.

 

사설 레지스트리에서 이미지 푸시하기

docker tag local-image:tag myregistry.example.com/myapp:tag
docker push myregistry.example.com/myapp:tag

 

  • local-image:tag는 로컬에서 사용할 이미지와 태그입니다.
  • myregistry.example.com/myapp:tag는 사설 레지스트리의 저장소 경로와 태그입니다.

사설 레지스트리에서 인증 없는 접근 허용하기

{
  "insecure-registries": ["myregistry.example.com:5000"]
}

 

인증 없이 사설 레지스트리에 접근하려면 --insecure-registry 플래그를 Docker 데몬 설정 파일에 추가해야 합니다. /etc/docker/daemon.json 파일을 열고 다음과 같이 설정합니다. 그 후 Docker 서비스를 재시작합니다.

sudo systemctl restart docker

 

자주 묻는 질문(FAQ)

Q1: 사설 레지스트리에서 인증 없이 이미지 다운로드는 어떻게 하나요?

A1: docker pull 명령어를 사용할 때 인증이 필요 없는 경우, --insecure-registry 플래그를 Docker 데몬 설정에 추가하고, Docker 서비스를 재시작해야 합니다.

Q2: 사설 레지스트리에서 이미지를 푸시하는 방법은?

A2: docker tag 명령어로 태그를 수정한 후 docker push 명령어로 푸시합니다.

Q3: 사설 레지스트리에서 특정 버전의 이미지를 다운로드하려면?

A3: docker pull myregistry.example.com/myapp:v1.0 형식으로 명령어를 입력합니다.

반응형

'IT > Docker' 카테고리의 다른 글

[Docker] Docker로 mysql 실행 및 데이터 공유  (0) 2024.07.07
Comments