티스토리 뷰

반응형

이 글은 '완벽한 IT 인프라 구축을 위한 Docker(Asa Shiho 지음, Yamada Yoshihiro 감수, 신은화 옮김)'  책을 바탕으로 요약 및 실습한 내용을 정리한 글입니다.


 실습 환경 설정

cd /home
mkdir docker

실습을 진행하기 위해 /home 경로에 'docker' 폴더를 하나 만들어주고 모든 실습은 별도로 명시하지 않을 경우 docker 폴더 내에서 진행합니다.



제5장 Docker 이미지 공유―Docker Registry

이미지에 네트워크나 OS 및 미들웨어 설정 등의 정보가 포함되어 있으므로 보안상 Docker Hub와 같이 인터넷을 통해 불특정다수에게 공개되는 곳에는 올릴 수 없는 경우가 생길 수 있습니다.


5-1 Private 레지스트리 구축 및 관리

Docker 레지스트리 구축

Docker 레지스트리는 Docker 이미지를 중앙에서 관리하기 위한 repository 서비스를 의미합니다.

private 네트워크에 Docker 레지스트리를 구축하기 위해서는, Docker Hub에 공개되어 있는 공식 이미지인 registry를 사용합니다.

현재 기준으로 registry는 Version 0과 Version 2의 두 가지로 나뉩니다.

  • Version 0 : Python
  • Version 2 : Go

각 버전은 다음과 같은 언어로 구현되어 있으며, 서로 호환되지 않으므로 주의해야 합니다.

Version 2는 Docker 1.6 이상에서 사용할 수 있으며 이미지에 고유 ID(digest)를 붙일 수 있어서 이를 통해 특정 이미지를 경정할 수 있습니다.

그럼 registry 이미지를 사용하여 private 네트워크 환경에서 Docker 레지스트리를 구축하는 방법을 알아봅시다. 이 Docker 레지스트리는 private 네트워크 내에서만 이미지를 공개할 수 있습니다.

docker search 커맨드로 registry를 확인해보면 다음과 같습니다.

# docker search 커맨드로 registry 확인
docker search registry


이 registry 이미지를 docker pull 커맨드로 로컬 환경에 다운로드합시다. 이때 Version 2를 사용한다면 태그명은 2.0으로 입력해야 합니다. 태그명을 지정하지 않으면 Version 0의 최신 버전으로 다운로드되니 주의해야 합니다.

# registry 이미지 다운로드
docker pull registry:2.0


다운로드가 완료되면 docker images 커맨드로 확인해봅니다.

# 다운로드한 registry 이미지 확인
docker images registry

도커가 구축된 저장소를 사용할 수 있도록 --insecure-registry 옵션을 줘야 합니다.

/etc/init.d/docker 파일을 열어서 DOCKER_OPTS 부분을 다음과 같이 수정한다.

# DOCKER_OPTS 수정
sudo atom /etc/init.d/docker

추가 소스 코드(자신의 IP 주소로 수정합니다.)

DOCKER_OPTS=--insecure-registry <자신의 IP 주소>:5000



Docker private repository를 사용하기 위해서는 insecure-registries설정을 해줘야 합니다. 우분투 기준으로 /etc/docker/daemon.json 파일을 생성합니다.

# insecure-registries 설정
sudo atom /etc/docker/daemon.json

생성된 json 파일에 insecure-registries항목을 추가합니다.

{ "insecure-registries":["<자신의 IP 주소>:5000"] }



수정을 완료하면 Docker를 재시작합니다.

# Docker 재시작
sudo service docker restart

다음으로 다운로드한 registry 이미지를 기반으로 docker run 커맨드를 통해 레지스트리용 컨테이너를 구동합니다. 레지스트리는 5000번 포트를 사용하므로 p 옵션을 이용해서 포트를 전송합니다. 컨테이너의 이름은 local-registry로 지정합니다.

# 컨테이너 구동
sudo docker run --name local-registry -d -p 5000:5000 registry:2.0

docker ps 커맨드를 통해 다음과 같이 컨테이너가 동작하고 있음을 확인할 수 있습니다.

이것으로 private 네트워크에 Docker 레지스트리를 구축하였습니다.


이미지 업로드

업로드할 이미지를 생성하기 위해 다음과 같이 Dockerfile을 작성합니다

이 Dockerfile을 다음 커맨드로 build하여 webserver 이미지를 생성합니다.


private 네트워크의 Docker 레지스트리에 업로드하기 위해서는 다음 룰에 따라 이미지에 태그를 붙여야 합니다.

예를 들어 로컬에 생성한 'webserver' 이미지를 localhost의 5000번 포트에서 동작하는 repository에 'httpd'라는 이름으로 업로드하려면 다음 내용을 따라해봅시다.

docker images 커맨드로 이미지를 확인해보면 '<자신의 IP 주소>:5000/httpd'라는 태그가 붙은 이미지가 생성된 것을 확인할 수 있습니다. 이 이미지의 IMAGE ID는 베이스가 된 'webserver'와 동일한 것을 알 수 있습니다.

이제 이 이미지를 docker push 커맨드로 private 레지스트리에 업로드해봅시다.

이미지 업로드가 완료되면 로컬에 저장되어 있는 이미지를 다음 커맨드를 통해 삭제합니다.

이미지 다운로드

private 레지스트리의 이미지를 로컬 환경에 다운로드할 때에는 docker pull 커맨드를 실행합니다. 예를 들어 <자신의 IP 주소>의 5000번 포트에서 동작하는 레지스트리로부터 httpd 이미지를 다운로드할 때에는 다음의 커맨드를 실행시킵니다.

다운로드가 완료되면 docker images 커맨드로 확인합니다.

private 레지스틑리로부터의 다운로드가 완료되었습니다. 이처럼 Docker Hub와 동일한 방법으로 private 레지스트리에서 Docker 이미지를 관리할 수 있습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함