이미지 배포

mohadang·2022년 4월 14일
0

도커

목록 보기
20/26
post-thumbnail

이미지를 생성해다면 이를 다른 도커 엔진에 배포할 수 있어야 한다.

파일 배포

save, export와 같은 방법으로 이미지를 단일 파일로 추출해서 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 많다면 이미지를 파일로 배포하기 어렵다.
또한 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적이다.

도커 허브

도커 허브 이미지 저장소를 이용하여 배포 가능하다
이미지를 push, pull 하기 쉽다. 공개(Public) 저장소는 무료로 사용할 수 있다, 단 결제를 하지 않으면 비공개(Private) 저장소의 수에 제한이 있는것이 단점이다
기본적으로 비공개 저장소는 1개만 무료이고 그 이상 사용하려면 매달 일정 금앨을 결제해야 한다.

docker inspect 명령어를 사용하면 해당 이미지가 언느 CPU 아키텍처에서 사용되도록 설정됐는지 알 수 있다. docker pull과 같은 명령어를 사용하면 자동으로 호스트의 CPU 아키텍처에 해당하는 이미지를 내려받기 때문에 이를 신경쓸 필요는 없다.

EX) 저장소에 이미지 올리기(push)

// 레포지터리에 올릴 이미지를 commit_container1를 사용하여 생성
$ docker run -it --name commit_container1 ubuntu:14.04
$ docker commit commit_container1 my-image-name:0.0

// 컨테이너를 이미지로 만들때 이미지 이름의 접두어는 이미지가 저장되는 저장소 이름으로 설정
// 즉, 특정 이름의 저장소에 이미지를 올리려면 저장소 이름(사용자의 이름)을 이미지 앞에 접두어로 추가해야 한다.
// my-image-name:0.0 <=> ${repository}:${tag}

// docker tag 명령어를 사용하면 이미지의 이름을 추가할 수 있다.
// docker tag [기존의 이미지 이름] [새롭게 생성될 이미지 이름]
$ docker tag my-image-name:0.0 mohadang-kim/my-image-name:0.0
$ docker images
REPOSITORY                   TAG       IMAGE ID       CREATED              SIZE
my-image-name                0.0       96bd64ec6a40   About a minute ago   197MB
mohadang-kim/my-image-name   0.0       96bd64ec6a40   About a minute ago   197MB

// docker hub에 로그인
$ docker login

// push
$ docker push mohadang-kim/my-image-name:0.0

도커 엔진에서 로그인한 정보는 /계정명/.docker/config.json 파일에 저장된다. 로그인 정보를 삭제하고 싶다면 docker logout을 입력 한다.

도커 사설 레지스트리

회사의 내부망과 같은 곳에서 도커 이미지를 배포해야 한다면 도커 사설 레지스트리가 더 좋은 방안이 될 수 있다. 단 세부적으로 설정해야할 것이 있어서 도커 허브보다는 사용하기 좀 복잡하다.

레지스트리 컨테이너는 기본적으로 5000번 포트를 사용한다

EX) 도커 레지스트에 이미지 올리기(push)

// 레지스트리는 컨테이너로서 구현되므로 이에 해당하는 도커 이미지가 존재한다.
// --restart 옵션은 컨테이너가 종료됐을 때 재시작에 대한 정책을 설정, 
// always는 컨테이너가 정지될 때마다 다시 시작하도록 설정하기 때문에 
// 도커 호스트나 도커 엔진을 재시작하면 컨테이너도 함께 재시작된다.
// on-failure:5로 설정하면 컨테이너 종료 코드가 0이 아닐 때 컨테이너 재시작을 5번까지 시도
// unless-stopped는 컨테이너를 stop 명령어로 정지했다면 
// 도커 호스트나 도커 엔진을 재시작해도 컨테이너가 시작되지 않도록 설정
$ docker run -d --name myregistry -p 5000:5000 --restart=always registry:2.6

// 사설 레지스트리에 올리기 위해 레지스트리가 존재하는 호스트의 IP와 
// 컨테이너의 5000번 포트와 연결된 호스트의 포트로 설정
$ docker tag my-image-name:0.0 ${DOCKER_HOST_IP}:5000/my-image-name:0.0

// 사설 레지스트리에 push
$ docker push 192.168.99.101:5000/my-image-name:0.0

기본적으로 도커 데몬은 HTTPS를 사용하지 않은 레지스트리 컨테이너에 접근하지 못하도록 한다. HTTPS를 사용하려면 인증서를 적용해 별도로 설정해야 한다.
물론 HTTPS를 사용하지 않고 레지스트리에 올릴 수 있는 방법도 있다

사설 레지스트리 RESTful API

도커 엔진은 명령행 도구로 docker ps와 같은 명령어를 사용할 수 있었지만 레지스트리 컨테이너는 별도의 인터페이스를 제공하지 않으므로 레지스트리 컨테이너를 제어하려면 RESTful API를 사용해야 한다.

EX)

// 컨테이너에 저장된 이미지의 목록을 확인
$ cur 192.168.99.100:500/v2/_catalog
// 특정 이미지의 태그 리스트를 확인
$ cur 192.168.99.100:500/v2/my-image-name/tags/list
profile
mohadang

0개의 댓글