RATSENO

[Docker]도커 프라이빗 레지스트리 구성 후 이미지 파일 올리기. 본문

DEV/DevOps

[Docker]도커 프라이빗 레지스트리 구성 후 이미지 파일 올리기.

RATSENO 2020. 8. 31. 15:15

프로젝트를 진행하다보면 외부 인터넷에 접속할 수 없는 환경, 폐쇄망 환경을 접할때가 있습니다.

이번 포스팅은 폐쇄망 환경에서 유용하게 사용될 수 있는. 도커 프라이빗 레지스트리를 구성해보겠습니다.

 

우리는 원하는 이미지 파일을 받기 위해서 docker pull [이미지 명] 명령어로 이미지 파일을 다운 받을 수 있습니다.

이 이미지 파일들은 대부분 docker hub에 올려져 있는 이미지 파일들입니다.

 

외부망으로 접근할 수 없는 폐쇄망에서는 docker hub에 있는 이미지 파일들을 사용할 수 없습니다. 접근을 할수 없기 때문이죠.

따라서 필요한 이미지 파일들을 외부에서 다운받은 후 docker save 명령어를 이용하여 .tar  파일로 변환 후

폐쇄망 도커 환경에 해당 파일을 docker load 명령어로 image  로 변환 후 밀어 넣어줘야 합니다. 

그 후 프라이빗 레지스트리를 구성하여 해당 레지스트리에 사용할 이미지 파일들을 push하여 프라이빗 레지스트리로 사용할 수 있습니다.

 

글로 간단하게 느낌을 잡을수 있을것 같지만 역시 직접 해보는게 빠릅니다. 일단 해보겠습니다.

먼저 docker registry를 구성하기 위해 registy image를 받겠습니다.

docker pull registry

 

저는 이미 실습을 진행하였기 때문에 출력되는 모습을 다를 수 있습니다.

잘 받아졌는지 확인해 보겠습니다.

docker images

빨간색 상자를 보시면 잘 받아졌습니다.

 

해당 이미지를 이용하여 컨테이너를 띄우겠습니다.

docker container run -d -p [컨테이너 포트 넘버]:[호스트 포트 넘버] --name [컨테이너명] registry
docker container run -d -p 5000:5000 --name registry registry

 

레지스트리 컨테이너가  정상적으로 띄어졌는지 확인합니다.

docker ps

registry라는 name으로 컨테이너가 동작하고 있습니다.

 

이제부터는 인터넷이 가능한 도커환경과, 폐쇄망 도커환경이라는 시나리오로 실습을 진행해보겠습니다.

우리는 폐쇄망 도커환경에 프라이빗 레지스트리 환경을 구성하였습니다.

폐쇄망 환경이라는 가정이라면 docker hub에서 이미지 파일을 pull할 수 없을 것입니다.

일단 레지스트리 환경까지는 구성 되있다는 가정 하에 진행하겠습니다.

왜냐하면 지금 부터 하는 내용으로 똑같이 구성할수 있기 때문입니다...

 

1.인터넷이 되는 docker 환경(외부)에서 image 파일을 pull.  (인터넷 가능 도커환경)

2. 해당 이미지 파일을 docker save 명령어로 .tar파일로 변환해서 떨굼 (운영체제 별로 해당 파일 위치 다름) (인터넷 가능 도커환경)

docker save -o postgres.tar postgres:latest

 

3.해당 파일을 저장매체 또는 SSH를 이용하여 폐쇄망 서버에 이동.

 

4.docker load 명령어로 image 파일 불러오기. (폐쇄망 도커환경)

docker load -i postgres.tar

5.해당 이미지 파일을 미리 폐쇄망에 구성해둔 프라이빗 레지스트리에 push하기 위해 새롭게 tag생성

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker postgres:latest 127.0.0.1:5000/postgres-test:latest

127.0.0.1:5000은 현재 프라이빗 레지스트리가 동작하고있는 컨테이너로의 주소입니다.

tag를 생성할때 저장소 주소/이미지 명:태그 형식으로 작성해 주어야 레지스트리로 push할 수 있습니다.

6.레지스트리로 push

docker image push 127.0.0.1:5000/postgres-test:latest

7. 레지스트리에 이미지 파일이 잘 올라갔는지 확인해봅니다. 저는 git bash를 사용했습니다.

curl -X GET http://127.0.0.1:5000/v2/_catalog

postgres-test가 보이는 것을 확인할수 있습니다.

 

8.해당 레지스트리에서 이미지 파일을 pull 할수 있는지 확인해 봅시다.

docker images

docker pull 127.0.0.1:5000/postgres-test:latest

 

폐쇄망 환경 가정하에 레지스트리 생성 및 동작과, image 파일 save, load, tag등을 진행해보았습니다.

 

만약 k8s(kubernetes)에서 pod을 생성하기 위한 image 파일을 사용할때 도커 레지스트리를 이용할 수 있습니다.

yaml 파일 작성 시

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  serviceName: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - env:
        - name: POSTGRES_USER
          value: kong
        - name: POSTGRES_PASSWORD
          value: kong
        - name: POSTGRES_DB
          value: kongEnterprise
        - name: PGDATA
          value: /var/lib/postgresql/data/pgdata


        image: postgres:9.5 이 부분을
        image: 127.0.0.1:5000/postgres-test:latest  이런식으로 변경하여 사용할수 있습니다.


        name: postgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: datadir
          subPath: pgdata
      terminationGracePeriodSeconds: 60
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

이론적인 부분이 많이 부족한 실습이었습니다. 

혹시 저처럼 맨땅에 헤딩하시는 분들을 위한 속성 포스팅이니 키워드만 참고해주시면 

도움이 조금이라도 될것같습니다..!

 

잘못된 부분이나 설명을 추가적으로 댓글달아주시면 감사드립니다.!!

Comments