기업이나 조직에서 민감한 이미지나 코드를 포함한 컨테이너 이미지를 저장할 필요가 있는데 이럴 때 Private 레지스트리가 필요하다. Private 레지스트리를 사용하면 내부에서 관리되고 안전한 환경에서 이미지를 저장할 수 있다. 이 외에도 비용 절감, 지연 시간 단축 및 여러 가지 장점이 있다.
인증도 구현하고 싶다면 [3. Authenication 인증 구현]부터 보면 된다.
1. Private Registry 생성
도커 레지스트리에 Private 레지스트를 생성할 수 있는 이미지가 올라와있다.
// docker run -d --name docker-registry -p 5000:5000 registry
docker run -d --name [이름] -p [서버 PORT]:5000 registry
- -d : 백그라운드 실행
- -p : 외부에서 접속할 서버 포트 설정
2. 외부에서 Private 레지스트리에 이미지 Push 방법
기존 도커 레지스트레 Push 하는 방법이 다른 점은 도커 ID를 넣는 대신 ip, port를 넣는다.
// sudo docker tag echo_test 127.0.0.1:5000/echo_test
sudo docker tag [기존 이미지] [서버 IP]:[서버 PORT]/[이미지명]
//sudo docker push 127.0.0.1:5000/echo_test
sudo docker push [서버 IP]:[서버 PORT]/[이미지명]
- 서버 IP, PORT : Private 레지스트리를 설치한 서버의 IP와 설정한 서버 PORT
반응형
3. Authenication 인증 구현
HTTPS가 미적용된 레지스트리는 PUSH가 안된다. Sever에 HTTPS 인증서를 발급 받거나, Client에 insecure-registries 설정한다.
https://docs.docker.com/registry/#auth
3-1) htpasswd 사용자 계정 생성
htpasswd 프로그램을 실행하여 사용자 이름과 비밀번호를 암호화한 후 그 결과를 /docker/auth 파일에 저장한다.
// htpasswd파일을 저장할 디렉토리 생성
$ mkdir -p /docker/auth
// htpasswd 파일 생성. 이미지로 생성된다.
// docker run --entrypoint htpasswd registry -Bbn kib3388 1234@ > /docker/auth
docker run --entrypoint htpasswd registry -Bbn [ID] [PW] > /docker/auth
- --entrypoint htpasswd : entrypoint 옵션은 컨테이너가 시작될 때 실행되게 하는 명령어로, 실행되게 되면 htpasswd를 프로그램이 실행되고 해당 프로그램이 생성한 결과를 파일에 저장한다.
- registry : 실행할 컨테이너의 이미지 이름
- -Bbn [ID] [PW] : htpasswd 프로그램에 전달될 옵션으로 -B는 bcrypt으로 암호화하고 -bn은 표준 출력에 사용자와 비밀번호를 표시한다.
- > /docker/auth : 해당 경로에 파일을 저장한다.
3-2) Private Registry 컨테이너 생성
docker run -d -p [호스트 PORT]:5000 \
--restart always \
-v /docker/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Username and Password Required" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
--name [컨테이너 이름] registry
- -d : 백그라운드 실행
- -p : 외부에서 접속할 서버 포트 설정
- --restart always : 컨테이너가 종료되었을 때(시스템 부팅, 도커 재시작) 자동으로 다시 시작되도록 설정
- -v : 볼륨 마운트
- REGISTRY_AUTH : 인증 방식을 설정하기 위한 환경 변수 htpasswd로 설정한다.
- REGISTRY_AUTH_HTPASSWD_REALM : 웹 브라우저로 사용자가 접근할 때 인증 팝업에 표시되는 내용
- REGISTRY_AUTH_HTPASSWD_PATH : 인증 파일의 경로를 지정하는 환경 변수
- registry : 레지스트를 생성할 수 있는 이미지
3-3) Client Push 방법
[insecure-registries]
이 옵션은 보안적으로 신뢰할 수 없는 레지스트리에 대한 접속을 허용하는 설정으로 [/etc/docker/daemon.json]에 아내 내용을 추가한다.(mac, Linux는 해당 경로에 있음)
{
// "insecure-registries":["localhost:5000" ]
"insecure-registries":["[레지스트 IP]:[레지스트 PORT]" ]
}
docker login [레지스트리 IP]:[레지스트리 PORT]
// 이후 작업은 [2. 외부에서 Private 레지스트리에 이미지 Push 방법]를 따라한다.
반응형
'DevOps > Docker, K8s' 카테고리의 다른 글
[k8s] 클러스터 구축 및 파드 네트워크 설정(Cilium) (0) | 2024.10.20 |
---|---|
[k8s] 쿠버네티스 사용을 위한 kubeadm, kubelet 및 kubectl 설치 방법 (0) | 2024.04.10 |
[Docker] 이미지 Push 방법 (0) | 2024.03.15 |
[Docker] dockerfile를 만들어 이미지 빌드하는 방법 (0) | 2024.03.14 |
[Docker] 주피터(Jupyter) LAB 서비스 구축 (0) | 2024.03.13 |