docker pull 로 이미지를 docker hub 에서 받아올 때 아래와 같이 에러가 나며 실패하는 경우가 있다.

$ docker pull centos:6
Error response from daemon: no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found

 

해당 태그(6)의 이미지가 없기 때문인데, 사용 가능한 태그 목록을 조회하기 위해 docker hub 웹사이트에 접속한다.

docker hub 웹사이트에서 원하는 이미지를 찾아 들어가면 Tag summary 에서 인기있는 주요 태그들을 볼 수있다.(권장하는 태그들)

 

그리고, Tag 탭을 통해 들어가면 docker hub 에 push 된 모든 태그를 볼 수 있다. 하지만 페이지네이션 때문에 한번에 모든 태그를 볼 수가 없다.

 

(Tag summary 에 노출되는 기준은 Tags 에서 확인할 수 있는 태그 목록의 newest 내림차순 10개인 것 같다.)

 

웹사이트에 방문하지 않고 다음 커맨드로도 조회할 수 있다.

$ curl -s "https://registry.hub.docker.com/v2/repositories/library/centos/tags/" | jq '.results[].name'

 

하지만, page_size 파라미터 기본값이 10이고, 최대값이 100 이기 때문에, nginx 나 ubuntu 와 같이 태그가 엄청나게 많은 경우에는 최대 100개까지밖에 조회가 안된다.(docker 의 정책이다) 따라서, 모든 태그를 조회하기 위해 아래 스크립트를 실행하면 된다. 각 fetch 의 응답필드 중 next 에 명시된 url 을 추가 호출하는 방식이다.

 

fetch-docker-hub-all-tags.sh

#!/bin/bash

# 인자 확인
if [ -z "$1" ]; then
  echo "사용법: $0 <repository-name>"
  echo "예시: $0 ubuntu"
  exit 1
fi

REPO="$1"
URL="https://registry.hub.docker.com/v2/repositories/library/${REPO}/tags?page_size=100"

while [ "$URL" != "null" ]; do
  RESP=$(curl -s "$URL")
  echo "$RESP" | jq -r '.results[].name'
  URL=$(echo "$RESP" | jq -r '.next')
done

 

이를 다음과 같이 이미지명을 파라미터로 주입하여 실행하면 모든 태그를 조회할 수 있다.

$ sh fetch-docker-hub-all-tags.sh centos
$ sh fetch-docker-hub-all-tags.sh ubuntu
$ sh fetch-docker-hub-all-tags.sh nginx

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

다른 블로그 글들을 보면 host 의 timezone 파일을 도커 컨테이너에 연결해서 timezone 을 일치시키는 방법을 많이 쓴다.

하지만 윈도우에서 어떻게 하는지 몰라 그냥 쉽고 편한 방식인 tzdata 를 이용한 방법을 썼다.

 

우분투 컨테이너에서 아래 명령어를 차례로 실행

 

apt update

apt install tzdata

dpkg-reconfigure tzdata

위와 같이 대륙?과 도시를 선택하면 된다.

로컬타임과 유니버셜타임이 각각 설정되며,

date 명령어로 확인하면 KST 타임존이 적용된 것을 볼 수 있다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

- search 키워드

: 설치가능한 이미지 검색

 

- pull 이미지명

: 이미지 다운로드

 

- images [이미지명]

: 다운로드 받은 이미지 목록

 

- create [옵션] --name 컨테이너명 이미지명

: 이미지를 컨테이너로 만들기

: 옵션은 보통 -i -t 를 주며, -i는 상호입출력, -t는 tty를 사용하여 bash 쉘로 입출력

 

- ps [옵션]

: 현재 컨테이너 목록보기

: 옵션을 안주면 실행중인 컨테이너만 보이며, -a 옵션을 주면 모든 컨테이너를 보여줌

 

- start 컨테이너명

: 컨테이너를 실행(이미 create 로 만들어져 있어야 함)

 

- attach 컨테이너명

: 컨테이너에 연결(이미 start 로 실행되어 있어야 함)

 

- run [옵션] --name 컨테이너명 이미지명 이미지실행파일경로

: 생성(create) + 실행(start) + 연결(attach)까지 한번에 하는 명령어

 

- stop 컨테이너명

: 컨테이너 종료

 

 

* 컨테이너 종료

exit

* 컨테이너 실행상태에서 빠져나오기(백그라운드 실행)

ctrl + p, ctrl + q

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,