티스토리 뷰

docker를 사용하기 위해서는 이미지를 registry 에서 받아와야 합니다.
열심히 사용하다가 이미지를 업로드 시켜야 하는 경우에 마찬가지로 docker hub에 Repository를 만들고 올리면 됩니다.
문제는 인터넷이 안되는 환경이거나, 여러개의 private repository가 필요한 상황에는 내부에 private 한 docker registry가 필요 합니다.
흔히 Harbor를 설치해서 사용합니다. 하지만, Harbor는 무겁고, 사소하지만 버그들이 좀 있습니다.
이 경우에는 Harbor가 아닌 gitlab 이나 nexus로 구성할 수 있습니다.
개인적으로 구성 해 봤을때, Nexus로 구성하는게 더 편하고 직관적이었습니다.
이번에 Nexus로 Docker 저장소를 구성하는 방법을 설명 하고자 합니다.
A. 실행 환경
1. System Requirements
- CPU : 4Core 이상 권장.(하지만 1Core만 해도 설치는 가능 함.)
- Memory : 4GB 이상
- DISK : 100MB 이상
2. Infra 환경
- Docker
- Port :
- 8081 : Web 접속 Port
- 8084 : Docker 저장소의 HTTP Port
- 8085 : Docker 저장소의 HTTPS Port
B. 설치
1. Docker 설치
이전 게시물을 참고해 주세요.
2024.08.22 - [Infra] - 컨테이너 런타임시스템 Docker!!
컨테이너 런타임시스템 Docker!!
A. 개요1. Docker 가 뭐지?도커(Docker)는 애플리케이션을 컨테이너라는 단위로 패키징하여 배포, 실행, 관리할 수 있게 해주는 오픈 소스 플랫폼이다. 컨테이너는 애플리케이션과 그 실행 환경을 함
tack0829.tistory.com
2. docker-compose.yaml 작성
mkdir -p /data/install/nexus/script /data/appdata/nexus/nexus-data /data/nexus/sonatype-work
sudo chown -R 200:200 /data/appdata/nexus
cat << EOF > /data/install/nexus/script/docker-compose.yaml
version: "3"
services:
nexus:
container_name: nexus
image: "sonatype/nexus3"
restart: always
volumes:
- "/data/appdata/nexus/nexus-data:/nexus-data"
- "/data/appdata/nexus/sonatype-work:/sonatype-work"
ports:
- "8081:8081"
- "8084:80"
- "8085:443"
EOF
- 8081 : Nexus 접근 Web Port 입니다.
- 8084 : Docker 저장소의 http Port 입니다.
- 8085 : Docker 저장소의 https port 입니다.
3. 기동
docker compose -f /data/install/nexus/script/docker-compose.yaml up -d
- admin 계정의 비밀번호는 다음과 같이 확인 할 수 있다.
cat /data/appdata/nexus/nexus-data/admin.password
256724f8-a2d7-4bd9-989f-b2a1a60712d2
4. 접속 테스트
설치 된 데이터들의 경로를 확인 합니다.
정상적으로 파일이 생성되었죠...

사이트에 접속 합니다.
http://127.0.0.1:8081
(저는 192.168.0.141 로 구성되어 있습니다. 참고하세요.)
(1) admin 계정으로 로그인

로그인 하기 위해 Sign in 링크를 클릭하면, 아래 처럼 로그인 창이 뜹니다.

/nexus-data/admin.password가 생성됩니다.
확인 해 봅니다.
cat /data/appdata/nexus/nexus-data/admin.password

아까는 없던 파일이 이제는 보입니다.
이 계정으로 로그인 합니다.
(2) 설정

이제부터 설정을 합니다.

적당한 password를 입력 합니다.
참고로 admin password이므로 복잡하면 복잡할 수록 좋습니다.

구성의 편의를 위해서 anonymouse access를 Enable 해 줍니다.

그러면 이제 구성이 끝납니다.
C. Docker Repository 구성
Nexus의 저장소는 여러가지 Type의 라이브러리들을 저장할 수 있는 Repositories 타입을 지원합니다.
각 Type별로 저장소에 Storage를 설정할 수 있죠. File Stororage 및 S3와 같은 Cloud의 Bucket에 저장하는 것도 지원합니다. AWS의 S3와 Azure의 Blob Storage 등을 S3 타입으로 설정할 수 있습니다.
먼저 Blob Storage를 생성 해 줍니다. 이후 Repository를 생성 해 주고 저장할 Storage를 지정 해 줍니다.
1. Blob Storage 생성
설정으로 이동합니다.
좌측 상단의 톱니바퀴 아이콘을 클릭합니다.

Create Blob Store 를 클릭해서 생성 화면으로 이동합니다.
: Repository > Blob Stores > Create Blob Store

Type은 File로, Name은 적당히 알아볼 수 있는 이름으로 합니다.
저는 docker 라는 storage 로 만들었습니다.

목록에서 생성된 storage를 확인할 수 있습니다.

2. Respository 생성
저장할 공간은 만들었지만, 외부에서 접근하기 위한 경로는 아직 없는 상태입니다.
Repository를 생성하면 외부에서 접근하기 위한 Port가 정의됩니다.

Recipe 는 docker(hosted)를 선택 합니다.

참고로 여기서 group / hosted / proxy 가 있는데,
- hosted는 local에 저장하는 저장소 입니다.
- proxy는 외부의 저장소로 proxy 하고 local cache를 생성합니다.
- group은 hosted와 proxy를 하나로 묶어서 한개의 repository로 구성합니다. hosted에 없으면 proxy에서 조회 합니다.

아래와 같이 설정 하고 생성 합니다.
- port는 http:80, https:443 으로 설정합니다.
- blob store 는 docker

생성된 docker 저장소가 보입니다.
D. Docker Repository Test
1. Insecure
(1) daemon.json 설정
docker repository는 기본적으로 https 통신을 해야 합니다. 하지만 현재 구성은 인증서가 없으므로, http 프로토콜로 통신해야 합니다.
insecure 설정을 해 줍니다.
cat << EOF | sudo tee -a /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.0.141:8084"]
}
EOF
설정 변경 후 service 를 restart 해 줍니다.
sudo systemctl restart docker
docker service가 재기동 되고, nexus가 다시 재기동 됩니다.
기다립니다... 웹으로 접속이 가능해질 때까지..
약 2-3분 정도 뒤에.. Web으로 접속해서 정상 접속이 되면 이제 테스트를 진행 해 봅니다.
현재 Nexus 이미지를 한번 Push 해 봅니다.
(2) Docker login
docker image를 올리기 위해서는 docker registry에 login을 해야 합니다.
여기서는 http port은 8084로 로그인 할겁니다.
docker ps를 통해 설정된 port 목록을 확인 하실 수 있습니다.
계정은 admin 계정으로 로그인 하시면 됩니다.
docker login http://192.168.0.41:8084

insecure로 설정 해서 http로 로그인이 가능합니다.
(3) Docker Registry에 Image Push
이제 이미지를 올려 보도록 하겠습니다.
현재 nexus 이미지가 local에 있습니다.
docker images

이 이미지를 올려 보도록 합니다.
Tag를 [저장소주소]/[이미지명]:[tag] 의 형식으로 생성 합니다.
docker image tag sonatype/nexus3:latest 192.168.0.141:8084/sonatype/nexus3:latest

이제 새로운 이미지 Tag 가 생성 되었습니다.
Push 를 해 봅니다.
docker push 192.168.0.141:8084/sonatype/nexus3:latest

Push가 완료 되었습니다.
사이트에서 확인 해 봅니다.

이렇게 정상적으로 올라간 것을 확인할 수 있습니다.
이제 다운로드 받아 봅니다.
먼저 local에 만들어지 tag를 삭제 합니다.
docker rmi 192.168.0.141:8084/sonatype/nexus3
이제 pull 을 받아 봅니다.
docker pull 192.168.0.141:8084/sonatype/nexus3

정상적으로 pull 이 실행 되는것을 확인할 수 있습니다.
2. Secure 구성
insecure 환경은 local에서 인증서가 없을 경우에 구성하는 방법입니다.
Duckdns와 Letsencrypt를 이용해서 SSL 인증서를 발급 받아서 구성하는 방법과 Nginx 구성 방법은 이전에 올린 게시물에서 확인 하시기 바랍니다.
2024.08.21 - [Infra] - DuckDns + LetsEncrypt로 Nginx HTTPS설정
DuckDns + LetsEncrypt로 Nginx HTTPS설정
프로젝트 초기에는 도메인 및 인증서가 없는 상황이 대부분이다. 하지만 backing system들 중, SSL 인증서가 필요한 환경도 있을 수 있다.(가령 docker registry 등…) 이때, public 도메인과 공인 인증서를
tack0829.tistory.com
이 Nginx에 다음과 같은 conf 를 적용하면 구성이 완료 됩니다.
도메인이 docker.host.com 이라고 가정 합니다.
server {
listen 80;
server_name docker.host.com;
client_max_body_size 0;
location /v2 {
proxy_redirect off;
proxy_http_version 1.1;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://192.168.0.141:8084;
}
}
server {
listen 443 ssl;
server_name docker.host.com;
include common.d/ssl_cert.conf;
location /v2 {
# docker login
proxy_redirect off;
proxy_http_version 1.1;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://192.168.0.141:8085;
}
}
이렇게 하면 docker 저장소에 이미지를 push 하고 받아올 수 있습니다.
'Infra' 카테고리의 다른 글
[SSL] 자체 서명 인증서 (Self Signed Certificate)를 Nginx에 설정 하기 (1) | 2024.09.20 |
---|---|
[K8S] Kubernetes Nodeport로 서비스 테스트 하기 (2) | 2024.08.30 |
[K8S] Kubernetes 설치 (VirtualBox+Vagrant+K8S:v1.31) (2) | 2024.08.29 |
docker-compose 에 대한 소개 및 사용법 (0) | 2024.08.28 |
[IaC] vagrant로 virtualbox의 VM 관리하기 (2) | 2024.08.23 |
- Total
- Today
- Yesterday
- service nodeport
- nodeport service kubernetes
- nexus docker 저장소 구축
- vagrant install
- vagrant kubernetes install
- 무료인증서 letsencrypt
- nginx https letsencrypt
- nginx https
- vagrant kubernetws install
- 자체 서명 인증서 만들기
- kubernetes endpoint
- private docker registry 구축
- nexus 도커 저장소 구축
- k8s 설치
- docker compose install
- vagrant 설치
- dockershim oci cri
- letencrypt ssl 인증서
- vagrant virtualbox
- duckdns letsencrypt
- 사설인증서 nginx에 설정
- ssl 인증서 만들기
- k8s cluster
- 도커 저장소
- 무료도메인 duckdns
- docker-compose 사용법
- k8s service
- duckdns letsencrypt 인증서
- kubernetes taint
- calico 설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |