Docker Registry 생성하기
Docker Hub에서 제공하는 Private Registry는 유료입니다.
무료로 사용하기 위해서는 자체적으로 Docker 이미지의 프라이빗 저장소 역할을 하는
Docker Registry를 자신의 서버에 직접 설치 및 운영하여, 이미지를 Push하고 Pull할 수 있습니다.
1. Docker Registrey 설치 및 실행
Docker Registry는 공식 이미지로 제공되므로, 아래의 명령어로 손쉽게 컨테이너로 실행할 수 있습니다.
1) Docker Hub에서 docker registry 이미지 내려받기
docker pull registry
2) 확인
docker images | grep "registry.*"
3) docker-registry 이미지 실행
우선 볼륨으로 설정할 폴더를 생성해줍니다.
저는 srv폴더에 docker-registry 라는 폴더를 만들겠습니다.
sudo mkdir /srv/docker-registry
docker run --name local-registry -d --restart=always -p 5000:5000 -v /srv/docker-registry:/var/lib/registry registry
- docker run : 새로운 컨테이너를 생성하고 실행하는 명령어입니다.
- --name local-registry : 생성하는 컨테이너의 이름을 local-registry로 지정합니다. 이 이름으로 컨테이너를 관리할 수 있습니다. (예 : docker stop local-registry)
- -d (detached mode) : 컨테이너를 백그라운드에서 실행합니다. 실행 후 터미널에 컨테이너가 계속 표시되지 않으며, 컨테이너가 백그라운드에서 작동하게 됩니다.
- --restart=always : 컨테이너가 중단되거나 서버가 재부팅되면 컨테이너를 자동으로 다시 시작하도록 설정합니다. Docker 데몬이 재시작될 때도 컨테이너가 자동으로 시작됩니다.
- -p 5000:5000 : 호스트(서버)의 5000번 포트와 컨테이너 5000번 포트를 연결합니다. 이를 통해 호스트 localhost:5000으로 접속하면 컨테이너 내에서 실행중인 Docker 레지스트리로 접근할수 있습니다. 이 레지스트리 포트가 이미지를 푸시(push)하거나 풀(pull) 할때 사용됩니다.
- -v /srv/docker-registry:/var/lib/registry :
- -v : 호스트와 컨테이너 간에 디렉토리를 공유하는 옵션
- /srv/docker-registry : 호스트의 디렉토리 경로. Docker이미지 데이터가 이 경로에 영구 저장됩니다.
- /var/lib/registry : 컨테이너 내 Docker Registry의 데이터 저장경로
- 이 설정을 통해 컨테이너가 삭제되거나 재시작해도 이미지 데이터는 호스트의 /srv/docker-registry 디렉터리에 안전하게 저장되며, 컨테이너가 다시 시작되어도 해당 데이터를 계속 사용할 수 있습니다.
- registry : Docker 공식 이미지 중 하나인 Docker Registry 이미지를 사용합니다. 여기서 사용된 이미지는 기본 버전이며, 별도의 태그가 없으므로 최신 버전이 자동으로 다운로드되어 실행됩니다.
2. Docker Registry에 image Push
이미지를 push하기전에 먼저 이미지부터 만들어봅시다.
1) Dockerfile 생성
컨테이너 이미지를 빌드하려면 Dockerfile을 작성해야합니다.
아래는 예시입니다.
vi Dockerfile
# Step 1: Base image로 JDK 사용
FROM openjdk:11-jre-slim
# Step 2: JAR 파일을 컨테이너에 복사
COPY target/your-app.jar /app.jar
# Step 3: 컨테이너가 시작될 때 실행할 명령어
ENTRYPOINT ["java", "-jar", "/app.jar"]
2) 이미지빌드
이제 Dockerfile이 있는 디렉토리에서 아래 명령어를 실행합니다.
docker build -t my-app:latest .
-t my-app : 생성될 이미지에 my-app이라는 이름을 붙이고 태그를 latest 로 지정합니다.
. : (현재 디렉토리) : 현재 디렉토리에 있는 Dockerfile을 기준으로 이미지를 빌드합니다.
3. Docker 레지스트리에 이미지 푸시(Push)
이미지를 로컬 레지스트리에 푸시하기 위해서는 레지스트리 주소가 포함된 태그를 설정해야합니다.
1) 이미지 태그 설정
푸시할 이미지에 태그를 추가합니다.
docker tag <이미지명:태그명> <레지스트리주소>/<이미지명:태그명>
예시
docker tag my-app:latest localhost:5000/my-app:latest
2) 이미지 푸시(Push)
Docker 레지스트리로 이미지가 푸시됩니다.
docker push <레지스트리주소>/<이미지명>:<태그명>
예시
docker push localhost:5000/my-app:latest
4. Docker 레지스트리에서 이미지 풀(Pull)
다른 서버나 로컬에서 Docker 레지스트리에 저장된 이미지를 다운로드하려면 아래 명령어를 사용합니다.
docker pull <레지스트리주소>/<이미지명>:<태그명>
예시
docker pull localhost:5000/my-app:latest
5. 이미지 실행(Run)
이미지를 로컬로 풀한 후, 이 이미지를 기반으로 컨테이너를 실행하려면 아래 명령어를 사용합니다.
docker urn -d <컨테이너이름> <레지스트리주소>/<이미지명>:<태그명>
예시
docker run -d --name my-app-container localhost:5000/my-app:latest
-d : 컨테이너를 백그라운드에서 실행합니다.
--name my-app-container : 컨테이너 이름을 my-app-container 로 지정합니다.
localhost:5000/my-app:latest : 풀받은 이미지 명
6. Docker Registry 접근하기
Docker 레지스트리는 경량화된 환경이므로 컨테이너 내부에 접속하려면 /bin/bash대신 /bin/sh를 사용해야합니다.
docker exec -it <레지스트리명> /bin/sh
예시
docker exec -it local-registry /bin/sh
'DevOps > 🐳 Docker & Kubernetes' 카테고리의 다른 글
Docker | Nginx 설치 (0) | 2024.10.04 |
---|---|
Docker | Docker Compose 설치 (1) | 2024.10.04 |
Docker | GitLab Runner 등록하는법 (0) | 2024.10.03 |
Docker | Jenkins 설치 (2) | 2024.09.30 |
Docker | 도커의 접근방식 DinD, DooD (0) | 2024.09.30 |