티스토리 뷰

Docker 와 Container

Docker registry 배포

looeon 2024. 3. 6. 12:22

▶ Ubuntu 에서 CentOS 로 배포

 

○ 사전작업

# docker system prune 으로 나머지 모든 쓰지않는 docker 를 삭제한다

>>> 불필요한 도커이미지 및 컨테이너 일괄 삭제
docker container prune
docker image prune
docker network prune
docker volume prune
 
 한방에 처리!
 docker system prune
vagrant@docker2:~$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
vagrant@docker2:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
vagrant@docker2:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
vagrant@docker2:~$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

 

 

 

▶ CentOS 에 호스트 추가

[vagrant@docker1 work]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 docker1.example.com docker1
192.168.25.20 registry.example.com registry

[vagrant@docker1 work]$ ping registry
PING registry.example.com (192.168.25.20) 56(84) bytes of data.
64 bytes from registry.example.com (192.168.25.20): icmp_seq=1 ttl=64 time=0.540 ms
64 bytes from registry.example.com (192.168.25.20): icmp_seq=2 ttl=64 time=0.707 ms

 

 

▷ restart 옵션

>> --restart=always 를 적으면 시간이 끝나고 계속 다시 살아난다

>> 안정적인 운영이 가능해진다

[vagrant@docker1 work]$ docker run -d --name myalpine --restart=always alpine /bin/sleep 10s
c2a19d9fce45d9eca6fe49c3009c502eff7f0368e8ae8f318211abb6016a7d33
[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE     COMMAND            CREATED         STATUS         PORTS     NAMES
c2a19d9fce45   alpine    "/bin/sleep 10s"   3 seconds ago   Up 2 seconds             myalpine
[vagrant@docker1 work]$ docker ps
CONTAINER ID   IMAGE     COMMAND            CREATED          STATUS         PORTS     NAMES
c2a19d9fce45   alpine    "/bin/sleep 10s"   49 seconds ago   Up 5 seconds             myalpine

 

 

 

https://hub.docker.com/_/registry

 

registry - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com

 

 

▶docker registry를 다운로드 해야한다

vagrant@docker2:~$ docker pull registry
Using default tag: latest
latest: Pulling from library/registry
619be1103602: Pull complete
2ba4b87859f5: Pull complete
0da701e3b4d6: Pull complete
14a4d5d702c7: Pull complete
d1a4f6454cb2: Pull complete
Digest: sha256:f4e1b878d4bc40a1f65532d68c94dcfbab56aa8cba1f00e355a206e7f6cc9111
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

 

 

▶ 레지스트리는 포트포워딩을 하여 다른 장비에서도 접근할 수 있도록 해야한다

# 2대를 사용한다 >> 확실한 확인을 위하여!

# Ubuntu = server / CentOS = client

 

 

▶ 우분투에 레지스트리를 안정적으로 올린다 (  + 포트포워딩 )

vagrant@docker2:~$ docker run -d --name resgistry -p 5000:5000 --restart=always registry
dda531fc8bbb5ed7fdbadc6b7c9b6421f20a31decc128360937cbbf968786ef9
vagrant@docker2:~$ docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                    NAMES
dda531fc8bbb   registry   "/entrypoint.sh /etc…"   6 seconds ago   Up 4 seconds   0.0.0.0:5000->5000/tcp   resgistry

 

 

▶ CentOS 에서 태그를 붙인다

docker tag [ 원래 이미지 ] [업로드 할 이름 + 주소]:[포트]/[이미지이름]
# port 번호가 80 번이 아니면 포트 적는다
docker tag mariadb registry.example.com:5000/mariadb

[vagrant@docker1 work]$ docker image ls registry.example.com:5000/mariadb
REPOSITORY                          TAG       IMAGE ID       CREATED       SIZE
registry.example.com:5000/mariadb   latest    b8bba28b797b   13 days ago   405MB

 

▩ push 로 올리려는데 문제가 발생했다

>> https 로 접근하려는데 인증서가 없다

 

[vagrant@docker1 work]$ docker push registry.example.com:5000/mariadb
Using default tag: latest
The push refers to repository [registry.example.com:5000/mariadb]
An image does not exist locally with the tag: registry.example.com:5000/mariadb/mariadb

 

 

>> 보안 연결을 하지 않는( insecure ) 레지스트리를 추가한다

# 기본값이 https 이므로 설정 추가

sudo vim /etc/docker/daemon.json

{"insecure-registries": ["registry.example.com:5000"] }

 

>>> 설정 파일을 수정했으므로, docker 재시작

sudo systemctl restart docker

 

 

▶ 업로드 완료

[vagrant@docker1 work]$ docker push registry.example.com:5000/mariadb
Using default tag: latest
The push refers to repository [registry.example.com:5000/mariadb]
5e4b1404e367: Pushed
9c7cbbbceb18: Pushed
056ff895dee3: Pushed
81c6db1723bb: Pushed
e43c6de7b8c6: Pushed
81b7752ad68f: Pushed
d580601d7c98: Pushed
d101c9453715: Pushed
latest: digest: sha256:f9c5b6337991d16a3654d41892a9a87e507bf8f329df62f9d3cb2c08936154c6 size: 1990

 

 

▷ nginx:1.17 도 업로드

[vagrant@docker1 work]$ docker pull nginx:1.17
1.17: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699
Status: Downloaded newer image for nginx:1.17
docker.io/library/nginx:1.17

 

>> 같은 성격끼리 분류할 때에는 이름 앞에 / / 내용 추가되면 디렉터리로 된다

# webservers 에 아파치도 올리고 nginx 도 올릴 예정이기에 지정

[vagrant@docker1 work]$ docker tag nginx:1.17 registry.example.com:5000/webservers/nginx:1.17
[vagrant@docker1 work]$ docker push registry.example.com:5000/webservers/nginx:1.17
The push refers to repository [registry.example.com:5000/webservers/nginx]
6c7de695ede3: Pushed
2f4accd375d9: Pushed
ffc9b21953f4: Pushed
1.17: digest: sha256:8269a7352a7dad1f8b3dc83284f195bac72027dd50279422d363d49311ab7d9b size: 948

 

 

# Ubuntu 에서 업로드 확인

# 도커 이미지 레이어는 / var / lib / docker 에 저장된다

## 레지스트리 밑에 저장되어 있다

vagrant@docker2:~$ sudo find /var/lib/docker -name mariadb
/var/lib/docker/volumes/63a547f4b8c05c1d9464337b10c7cc27f6536549dc18d4175c56eca228570bd5/_data/docker/registry/v2/repositories/mariadb
vagrant@docker2:~$ sudo find /var/lib/docker -name nginx
/var/lib/docker/volumes/63a547f4b8c05c1d9464337b10c7cc27f6536549dc18d4175c56eca228570bd5/_data/docker/registry/v2/repositories/webservers/nginx

 

 

 

▶ curl 로 잘 업로드 되어있는지 확인한다

# v2 는 레지스트리의 버전

[vagrant@docker1 work]$ curl -X GET http://registry.example.com:5000/v2/_catalog
{"repositories":["mariadb","webservers/nginx"]}

 

▷ 다운로드 시작

[vagrant@docker1 work]$ docker pull registry.example.com:5000/mariadb
Using default tag: latest
latest: Pulling from mariadb
d66d6a6a3687: Pull complete
31505b2b3fb6: Pull complete
97328dbb4b34: Pull complete
15d22565a968: Pull complete
a150d2776ac9: Pull complete
5b0eb1c11437: Pull complete
11ffc9dfe027: Pull complete
51f9c9c328e6: Pull complete
Digest: sha256:f9c5b6337991d16a3654d41892a9a87e507bf8f329df62f9d3cb2c08936154c6
Status: Downloaded newer image for registry.example.com:5000/mariadb:latest
registry.example.com:5000/mariadb:latest

 

 

▶ nginx 의 버전은 출력이 안되었다 따라서, repositories 이름을 확인하고 다시 검색해봐야한다

[vagrant@docker1 work]$ curl -X GET http://registry.example.com:5000/v2/webservers/nginx/tags/list
{"name":"webservers/nginx","tags":["1.17"]}
[vagrant@docker1 work]$ docker pull registry.example.com:5000/webservers/nginx:1.17
1.17: Pulling from webservers/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:8269a7352a7dad1f8b3dc83284f195bac72027dd50279422d363d49311ab7d9b
Status: Downloaded newer image for registry.example.com:5000/webservers/nginx:1.17
registry.example.com:5000/webservers/nginx:1.17

 

'Docker 와 Container' 카테고리의 다른 글

Docker compose 응용  (0) 2024.03.06
Docker - compose  (0) 2024.03.06
Docker image upload  (0) 2024.03.06
LAB1  (0) 2024.03.05
Dockerfile - Multi-stage build  (0) 2024.03.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
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
글 보관함