
Docker Image registry : pravate, hub.docker.comINFRA/Doker2024. 7. 29. 00:01
Table of Contents
이미지 registry 저장소
- public or pravate로 나뉨
- hub.docker.com
- aws ecr
- hdd /var/library/docker/voulums
1.Private Registry
- registry 컨테이너를 이용해 private 컨테이너 운영
- 포트번호 무조건 5000번
- hub.docker.com에 올리지 않고 프라이빗에 올려서 권한 허용된 사람들만 쓰려는 목적
- 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
- 접근 완료
'INFRA > Doker' 카테고리의 다른 글
Docker image 경량화 (0) | 2024.07.29 |
---|---|
Docker 구성요소 / 접근 방법 (0) | 2024.07.28 |
Docker 명령어 정리 (0) | 2024.07.28 |