INFRA/Doker

Docker Image registry : pravate, hub.docker.com

sshhhh 2024. 7. 29. 00:01

이미지 registry 저장소

  • public or pravate로 나뉨
  • hub.docker.com
  • aws ecr
  • hdd /var/library/docker/voulums

   

1.Private Registry

  • registry 컨테이너를 이용해 private 컨테이너 운영
  • 포트번호 무조건 5000번
  • hub.docker.com에 올리지 않고 프라이빗에 올려서 권한 허용된 사람들만 쓰려는 목적
  1. Docker Registry 컨테이너 실행
  • 로컬에 Docker Registry를 설정 → 이미지를 Docker Hub에 올리지 않고 private 컨테이너로 로컬에서 운영
--포트번호 무조건 5000 규칙!
--Docker 데몬이 재시작될 때 컨테이너를 자동으로 재시작
--컨테이너 이름 registry, 이미지 태그 지정 registry:2 
root@docker:~# docker run -d -p 5000:5000 --restart always --name registry registry:2
~~
Status: Downloaded newer image for registry:2
7f4598760ab7a894f652ec9222f1990ee5a5b840066d5349f02d9bb6f952db48

root@docker:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
registry     2         6a3edb1d5eb6   8 months ago   25.4MB

root@docker:~# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED              STATUS              PORTS                                       NAMES
7f4598760ab7   registry:2   "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

 

 

2.Ubuntu 이미지를 Docker Hub에서 로컬 Docker 데몬으로 가져오는 작업

root@docker:~# docker pull ubuntu:focal
focal: Pulling from library/ubuntu
9ea8908f4765: Pull complete 
Digest: sha256:0b897358ff6624825fb50d20ffb605ab0eaea77ced0adb8c6a4b756513dec6fc
Status: Downloaded newer image for ubuntu:focal
docker.io/library/ubuntu:focal

root@docker:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       focal     5f5250218d28   2 weeks ago    72.8MB
registry     2         6a3edb1d5eb6   8 months ago   25.4MB

 

 

3.다운로드한 Ubuntu 이미지를 로컬 Registry에 저장

--이미지에 태그를 추가하여 로컬 Registry에 저장
root@docker:~# docker tag ubuntu:focal 127.0.0.1:5000/ubutu:v1.0

--로컬 저장소에 저장된 이미지 127.0.0.1:5000/ubutu:v1.0 푸시
root@docker:~# docker push  127.0.0.1:5000/ubutu:v1.0
The push refers to repository [127.0.0.1:5000/ubutu]
3ec3ded77c0c: Pushed 
v1.0: digest: sha256:38a0e8a00a21682240c31e48a3327dd7045dae42d300ff8e31e675660ac8dcbe size: 529

--이미지 목록 확인
--IMAGE ID가 같음
root@docker:~# docker images
REPOSITORY             TAG       IMAGE ID       CREATED        SIZE
127.0.0.1:5000/ubutu   v1.0      5f5250218d28   2 weeks ago    72.8MB
ubuntu                 focal     5f5250218d28   2 weeks ago    72.8MB
registry               2         6a3edb1d5eb6   8 months ago   25.4MB

root@docker:~# docker inspect 5f5
~~생략~~
[
    {
        "Id": "sha256:5f5250218d28ad6612bf653eced407165dd6475a4daf9210b299fed991e172e9",
				"RepoTags": [
            "127.0.0.1:5000/ubutu:v1.0",
            "ubuntu:focal"
        ],
"Layers": [
               "sha256:3ec3ded77c0ce89e931f92aed086b2a2c774a6fbd51617853decc8afa4e1087a"
]

 

 

4.이미지 저장 확인

root@docker:/var/lib/docker/volumes# ls -al
합계 40
drwx-----x  4 root root  4096  6월 21 10:37 .
drwx--x--- 12 root root  4096  6월 19 15:23 ..
--생략--
root@docker:/var/lib/docker/volumes/9b6a95f23562eaa2936c8216d40f3198623ee58ab923c5ed96d6f0cc754a4346/_data/docker/registry/v2# cd repositories/
root@docker:/var/lib/docker/volumes/9b6a95f23562eaa2936c8216d40f3198623ee58ab923c5ed96d6f0cc754a4346/_data/docker/registry/v2/repositories# ls
ubutu

 

 

5.우분투 삭제

root@docker:~# docker images
REPOSITORY             TAG       IMAGE ID       CREATED        SIZE
ubuntu                 focal     5f5250218d28   2 weeks ago    72.8MB
127.0.0.1:5000/ubutu   v1.0      5f5250218d28   2 weeks ago    72.8MB
registry               2         6a3edb1d5eb6   8 months ago   25.4MB

root@docker:~# docker rmi -f 5f5
Untagged: 127.0.0.1:5000/ubutu:v1.0
Untagged: 127.0.0.1:5000/ubutu@sha256:38a0e8a00a21682240c31e48a3327dd7045dae42d300ff8e31e675660ac8dcbe
Untagged: ubuntu:focal
Untagged: ubuntu@sha256:0b897358ff6624825fb50d20ffb605ab0eaea77ced0adb8c6a4b756513dec6fc
Deleted: sha256:5f5250218d28ad6612bf653eced407165dd6475a4daf9210b299fed991e172e9
Deleted: sha256:3ec3ded77c0ce89e931f92aed086b2a2c774a6fbd51617853decc8afa4e1087a

root@docker:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
registry     2         6a3edb1d5eb6   8 months ago   25.4MB

 

 

6.레파지토리에 저장해뒀으니 이미지 삭제해도 다시 다운됨

root@docker:~# docker run -d --name ubuntu 127.0.0.1:5000/ubutu:v1.0
Unable to find image '127.0.0.1:5000/ubutu:v1.0' locally
v1.0: Pulling from ubutu
560c024910be: Pull complete 
Digest: sha256:38a0e8a00a21682240c31e48a3327dd7045dae42d300ff8e31e675660ac8dcbe
Status: Downloaded newer image for 127.0.0.1:5000/ubutu:v1.0
292ce21980643387a07df1d2238a10197a23bf39f70bdcc871542f5af9ca9be8

   

 

2. Docker Hub

1.Docker 컨테이너 이미지를 저장, 공유 및 배포하는 클라우드 기반 레지스트리 서비스
Docker Hub Container Image Library | App Containerization

  • docker login : docker hub에 로그인

  • docker hub의 Repositoties에서 이미지를 가져옴

 

 

2. 로컬이미지 백업을 위해 사용

 

<순서>

1. 도커 허브에 로그인하고 이미지 태깅

  • 도커 허브에 이미지를 푸시하기 위해 태그를 변경
root@docker:~# docker login
Username: sinhye
Password:
Login Succeeded

root@docker:~# docker tag sinhye/httpd-web:v1.0 sinhye/httpd-web:v1.0
--docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

2. 도커 허브에 이미지 푸시

  • 이미지 sinhye/httpd-web:v1.0을 도커 허브에 push
root@docker:~# docker push sinhye/httpd-web:v1.0

3. 로컬에 있는 이미지와 컨테이너 삭제

  • hub.com에 올라왔기때문에 로컬에 있을 필요 없음
root@docker:~# docker rm -f $(docker ps -a -q)
root@docker:~# docker rmi -f $(docker images -q)

4. 도커 허브에서 이미지(sinhye/httpd-web:v1.0)을 다시 pull 및 컨테이너 실행

root@docker:~# docker run -d --name httpd -p 80:80 sinhye/httpd-web:v1.0

5. 실행 중인 컨테이너 확인

root@docker:~# docker ps
CONTAINER ID   IMAGE                   COMMAND                   CREATED         STATUS         PORTS                         NAMES
e9d4933b80e6   sinhye/httpd-web:v1.0   "usr/sbin/apache2ctl…"   4 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   httpd

 

 

>>docker.hub 확인<<

  • v2.0 빌드시 1.0보다 더 빠르게 올라감 같은 내용은 올리지 않기 때문이다.

 

 

3. 다른 예시

  • NGINX 크기는109MB이다. 컨테이너 용량을 이렇게 크게해서 빌드하면 안됨 → 컨테이너 이미지 커지면 hub.docker.com에 push할때 오래걸림 → 경량화해서 올려야함 일단은 그냥 push 이후 진행할 것임.
--로그인후 빌드해서 이미지만들고 엔진엑스 웹서버 컨테이너 써서 사용자들이 들어오게 하려고함 
root@docker:~# docker login
Login Succeeded

-- -t옵션으로 태그 지정
root@docker:~# docker build -t nginxweb:v1.0 .
[+] Building 5.3s (8/8) FINISHED

root@docker:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginxweb     v1.0      ca813a7b55a9   About a minute ago   109MB


root@docker:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginxweb     v1.0      ca813a7b55a9   8 minutesvi ago   109MB
--이미지 태그 지정/생성
--로컬에 존재하는 nginxweb:v1.0 이미지를 sinhye/nginxweb:v1.0이라는 이름으로 태그
--사용자이름/nginxweb저장소 이름/v1.0 이미지 태그
root@docker:~# docker tag nginxweb:v1.0 sinhye/nginxweb:v1.0

--생성한 이미지 도커허브에 push
root@docker:~# docker push sinhye/nginxweb:v1.0
The push refers to repository [docker.io/sinhye/nginxweb]
839e4de449f2: Pushed 
82ae01d5004e: Mounted from library/nginx 
b8f18c3b860b: Mounted from library/nginx 
5dacd731af1b: Mounted from library/nginx 
v1.0: digest: sha256:1b4d5500f80d541695914439e0076fcfe6debfa264e5f9072c5b6c0d2a0cba5f size: 1155

root@docker:~# docker ps
CONTAINER ID   IMAGE                  COMMAND                   CREATED         STATUS         
c61c17153d5d   sinhye/nginxweb:v1.0   "nginx -g 'daemon of…"   3 seconds ago   Up 2 seconds   
PORTS                               NAMES
0.0.0.0:80->80/tcp, :::80->80/tcp   nginxweb

 

  • 정상적으로 올라감

 

  • 접속 확인
root@docker:~# curl localhost:80
<html>
<head> 
<title>Nginx WebServer Container Build Success !!!</title> 
<style>
body {margin-top: 40px; background-color: #333;}
</style> 
</head>
<body>
<div style=color:white;text-align:center>
<h1>Nginx WebServer Container Build Success !!!</h1>
<h2>Congratulations!</h2>
<p><em>Your application is now running on a Nginx container .</em></p>
</p> </div>
</body>
</html>

root@docker:~# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nginxweb          v1.0      ca813a7b55a9   44 minutes ago   109MB
sinhye/nginxweb   v1.0      ca813a7b55a9   44 minutes ago   109MB

 

 

 

hub.docker.com 사용 예시 요약

--이미지 hub.docker.com 에서 가져옴
root@docker:~# docker pull sinhye/httpd-web:v1.0
v1.0: Pulling from sinhye/httpd-web
Digest: sha256:7470ab56b20c3b6169b3f7a0f3bb2e0aac21b64ed42e7bd36e8b5e2364669b68
Status: Image is up to date for sinhye/httpd-web:v1.0
docker.io/sinhye/httpd-web:v1.0

root@docker:~# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED        SIZE
sinhye/httpd-web             v1.0      4cbc9511745c   24 hours ago   205MB

--sinhye/httpd-web:v1.0 이미지를 사용하여 컨테이너를 백그라운드에서 실행
--컨테이너 이름은 appjs3, mynet 네트워크에 속하며 IP 주소 192.168.100.101를 할당
--호스트의 포트 8080과 컨테이너의 포트 8080을 매핑하여 웹 애플리케이션에 접근
root@docker:~# docker run -d --name appjs3 --net mynet --ip 192.168.100.101 -p 8080:8080 sinhye/httpd-web:v1.0
6384bc81d796a3ffebc2581e2ade9d5b6bc594876d23187dd75ce53c6698436f

root@docker:~# docker ps
CONTAINER ID   IMAGE                   COMMAND                   CREATED         STATUS         PORTS                                               NAMES
6384bc81d796   sinhye/httpd-web:v1.0   "usr/sbin/apache2ctl…"   8 minutes ago   Up 8 minutes   80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   appjs3

 

  • 접근 완료