티스토리 뷰
▶ 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 |