클라우드 + DevOps/Docker

Docker를 이용한 레지스트리 서버 이용

gamjadori 2024. 2. 5. 11:04
728x90

레지스트리 서버

주로 컴퓨터 운영 체제에서 시스템 구성 정보와 구성 설정을 저장하고 관리하는 부분

 

<역할>

1. 시스템 구성 및 설정 저장: 운영 체제, 응용 프로그램 및 하드웨어와 관련된 다양한 시스템 구성 정보 및 설정을 저장

2. 소프트웨어 구성 및 라이선스 관리: 설치된 소프트웨어의 구성 및 라이선스 정보를 저장하며, 이를 통해 운영 체제와 응용 프로그램이 정상적으로 작동하고 소프트웨어의 라이선스 정책을 준수

3. 하드웨어 및 장치 관리: 하드웨어 및 장치 드라이버와 관련된 정보를 저장하며, 이를 통해 시스템이 하드웨어와 장치와 효율적으로 상호 작용

4. 보안 및 권한 제어: 시스템과 소프트웨어의 보안 관련 정보와 권한 설정을 저장해 시스템의 안전성을 유지하고 불법적인 액세스를 방지

 

<레지스트리 서버(Host3) 구축>

  • 레지스트리 서버: Host 3
  • 클라이언트 서버: Host1 / Host2
  • 모두 도커 서비스가 깔려있다는 전제 하에서 진행

<레지스트리 서버(Host3) 설정>

1. 레지스트리 이미지 가져오기

ubuntu@host2:~$ docker pull registry
Using default tag: latest
latest: Pulling from library/registry
c926b61bad3b: Pull complete 
5501dced60f8: Pull complete 
e875fe5e6b9c: Pull complete 
21f4bf2f86f9: Pull complete 
98513cca25bb: Pull complete 
Digest: sha256:0a182cb82c93939407967d6d71d6caf11dcef0e5689c6afe2d60518e3b34ab86
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
ubuntu@host2:~$ docker image ls >> 이미지 확인
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
**registry     latest    909c3ff012b7   5 weeks ago   25.4MB**

 

2. 레지스트리 컨테이너 생성 및 가동 확인

ubuntu@host2:~$ docker container run -d -v /home/ubuntu/registry_data:/var/lib/registry -p 5000:5000 --restart=always --name=local-registry registry:latest
12240ee4fa70175924b82779eab1e3bde569b16ba254c2a4ff218217b6820239
ubuntu@host2:~$ docker container ps
CONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS          PORTS                                       NAMES
12240ee4fa70   registry:latest   "/entrypoint.sh /etc…"   23 seconds ago   Up 22 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   local-registry
  • 포트 확인 명령어 (컨테이너 생성 시, 포트 설정을 잘 했나 확인하기 위함)
ubuntu@host2:~$ sudo netstat -nlp
ubuntu@host2:~$ sudo netstat -nlp | grep 5000
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      2825/docker-proxy   
tcp6       0      0 :::5000                 :::*                    LISTEN      2832/docker-proxy

ubuntu@host2:~$ curl -X GET <http://192.168.56.103:5000/v2/_catalog>
{"repositories":[]}
>> 해당 서버에 올라 간 이미지가 없어 아무것도 뜨지 않음

 

3. 서버 설정

  • /etc/init.d/docker
  • /etc/docker/daemon.json

1. /etc/init.d/docker 설정

ubuntu@host2:~$ sudo vi /etc/init.d/docker

<vi 편집 내용>

 

2. /etc/docker/daemon.json

ubuntu@host2:~$ sudo vi /etc/docker/daemon.json
>> 원래 존재하지 않던 파일이라 자동생성되면서 빈 파일이 나옴

<vi 편집 내용>

ubuntu@host2:~$ sudo systemctl restart docker.service
>> 도커 시스템 재가동

 

<클라이언트 서버 설정>

  • 레지스트리 서버 (HOST3)에서 했던 설정 두 가지 작업 동일 반복

1. vi /etc/init.d/docker

ubuntu@host2:~$ sudo vi /etc/init.d/docker

<vi 편집 내용>

2. /etc/docker/daemon.json

ubuntu@host2:~$ sudo vi /etc/docker/daemon.json
>> 원래 존재하지 않던 파일이라 자동생성되면서 빈 파일이 나옴

<vi 편집 내용>

ubuntu@host2:~$ sudo systemctl restart docker.service

 

<클라이언트에서 레지스트리로 이미지 올리기>

  • tag > push 과정

1. 이미지 태그 (tag)

ubuntu@host1:~$ docker image ls
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
myweb             1.0       6b60617e4b69   23 hours ago   12MB
**choisieun/myweb   1.0       6b60617e4b69   23 hours ago   12MB
>> 올릴 이미지 리스트 확인**
ubuntu@host1:~$ docker image tag choisieun/myweb:1.0 192.168.56.103:5000/myweb:1.0
>> 이미지 태그
ubuntu@host1:~$ docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
**192.168.56.103:5000/myweb   1.0       6b60617e4b69   23 hours ago   12MB
>> 태그할 이미지 생성된 거 확인**
choisieun/myweb             1.0       6b60617e4b69   23 hours ago   12MB
myweb                       1.0       6b60617e4b69   23 hours ago   12MB

 

2. 이미지 올리기 (push)

ubuntu@host1:~$ docker image push 192.168.56.103:5000/myweb:1.0
The push refers to repository [192.168.56.103:5000/myweb]
Get "<https://192.168.56.103:5000/v2/>": http: server gave HTTP response to HTTPS client

<결과 확인>

ubuntu@host1:~$ curl -XGET <http://192.168.56.103:5000/v2/_catalog>
{"repositories":["myweb"]}
ubuntu@host1:~$ curl -XGET <http://192.168.56.103:5000/v2/myweb/tags/list>
**{"name":"myweb","tags":["1.0"]}**
ubuntu@host2:~$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     latest    909c3ff012b7   5 weeks ago   25.4MB

 

>>  리스트에는 있으나 docker image ls하면 보이지 않음

ubuntu@host2:~$ docker container ls
CONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS          PORTS                                       NAMES
12240ee4fa70   registry:latest   "/entrypoint.sh /etc…"   45 minutes ago   Up 35 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   local-registry
>> 확인 가능

 

<다른 클라이언트가 레지스트리를 통해 서비스 이용>

 

1. 이미지 내려받기 (pull)

ubuntu@host2:~$ docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
>> 현재 host2 서버에는 아무 이미지도 존재하지 않음을 확인
**ubuntu@host2:~$ docker image pull 192.168.56.103:5000/myweb:1.0**
1.1: Pulling from myweb
c926b61bad3b: Pull complete 
fed54a1dc458: Pull complete 
d4735778d47c: Pull complete 
8695c106552e: Pull complete 
dffa16519b51: Pull complete 
9e50a0e580b1: Pull complete 
5ddd532e9cec: Pull complete 
e2b9e37d0e1d: Pull complete 
625588b38c1b: Pull complete 
Digest: sha256:ae502a5919a61614e9909680a478c321d442be944456380f552f2ff51915932b
Status: Downloaded newer image for 192.168.56.103:5000/myweb:1.0
192.168.56.103:5000/myweb:1.0

<결과 확인>

 

ubuntu@host2:~$ docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
**192.168.56.103:5000/myweb   1.0       6b60617e4b69   24 hours ago   12MB**

 

2. 컨테이너 생성

ubuntu@host2:~$ docker container run -d -p 8001:80 --name mywebserver 192.168.56.103:5000/myweb:1.0
6548e75b35c57e9b30565978017bc396bd97d17be601cf3313e63c99727888f7
ubuntu@host2:~$ docker container ps >> 컨테이너 상태 확인
CONTAINER ID   IMAGE                           COMMAND                   CREATED         STATUS         PORTS                                   NAMES
6548e75b35c5   192.168.56.103:5000/myweb:1.0   "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   0.0.0.0:8001->80/tcp, :::8001->80/tcp   mywebserver

 

3. 결과 확인 (브라우저에 접속)

  • 192.168.56.102:8001