일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 유레카
- 스프링
- GIT
- Java
- 비동기
- spring boot
- IntelliJ
- EUREKA
- STS
- JavaScript
- 스프링 클라우드
- 프로그래머스
- 도커
- 코딩테스트
- 자바스크립트
- leetcode
- docker
- OAuth
- jQuery
- 자바
- JS
- 스프링부트
- SpringBoot
- gitlab
- Spring Cloud
- map
- date
- spring security
- map()
- Spring
- Today
- Total
RATSENO
[Docker]도커 프라이빗 레지스트리 구성 후 이미지 파일 올리기. 본문
프로젝트를 진행하다보면 외부 인터넷에 접속할 수 없는 환경, 폐쇄망 환경을 접할때가 있습니다.
이번 포스팅은 폐쇄망 환경에서 유용하게 사용될 수 있는. 도커 프라이빗 레지스트리를 구성해보겠습니다.
우리는 원하는 이미지 파일을 받기 위해서 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
이론적인 부분이 많이 부족한 실습이었습니다.
혹시 저처럼 맨땅에 헤딩하시는 분들을 위한 속성 포스팅이니 키워드만 참고해주시면
도움이 조금이라도 될것같습니다..!
잘못된 부분이나 설명을 추가적으로 댓글달아주시면 감사드립니다.!!
'DEV > DevOps' 카테고리의 다른 글
AWS EC2에 docker, docker-compose를 이용하여 keycloak 설치하기 (0) | 2020.10.21 |
---|---|
[docker]redis 설치하기 (0) | 2020.09.17 |
[Docker]간단 명령어 정리 (0) | 2020.08.18 |
KONG API GATEWAY 설치 (Docker for window) (0) | 2020.08.06 |
[Linux]su, sudo 명령어 차이 (0) | 2020.01.03 |