티스토리 뷰
[Docker] 완벽한 IT 인프라 구축을 위한 Docker: 제5장 Docker 이미지 공유―Docker Registry
miiingo 2018. 1. 30. 11:33이 글은 '완벽한 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 이미지를 관리할 수 있습니다.
'개발도구 > Docker' 카테고리의 다른 글
[Docker] Docker 이미지 압축 및 로드 (0) | 2018.11.16 |
---|---|
[Docker] 완벽한 IT 인프라 구축을 위한 Docker: 제6장 여러 컨테이너를 통합 관리―Docker Compose (0) | 2018.02.09 |
[Docker] 완벽한 IT 인프라 구축을 위한 Docker: 제4장 Dockerfile로 서버 구축 (0) | 2018.01.30 |
[Docker] 완벽한 IT 인프라 구축을 위한 Docker: 제3장 Docker의 설치 방법과 기본 커맨드 (0) | 2018.01.30 |
[Docker] 완벽한 IT 인프라 구축을 위한 Docker: 제2장 컨테이너 가상화 기술과 Docker (0) | 2018.01.30 |
- Total
- Today
- Yesterday
- 알고리즘
- javascript
- 암브로셔스
- DOCs
- 어서와 데이터는 처음이지
- Hyperledger Fabric v1.2
- 하이퍼레저 패브릭
- 하이퍼레저 페브릭
- Private Data
- 코테
- ambrosus
- 코딜리티
- 문제풀이
- Hyperledger Indy
- codility
- 하이퍼레저 인디
- 코딩테스트
- 빅데이터 기초
- 블록체인
- 기초 of 기초 데이터 개념
- ubuntu
- 직딩잇템
- docker
- 빅데이터
- 빅데이터 교육
- 블록 체인
- Hyperledger Fabric
- 빅데이터 강의
- Hyperledger Fabric v1.1
- Blockchain
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |