반응형

이 포스팅은 2020년 네이버 블로그에 올렸던 내용을 리 포스팅했습니다.

 

지금까지의 포스팅에서 도커(docker) 이미지(혹은 컨테이너 이미지)는 도커 허브(https://hub.docker.com/)로부터 공개된 이미지를 끌어와(pull) 만들었습니다. 이렇게 컨테이너 이미지를 등록, 보관 관리하는 곳을 container registry라고 하는데 Network의 Public 망이 엄격히 금지되는 곳에서는 네트워크 망 내에 별도의 registry를 만들어야 될 필요가 있습니다.(maven repository를 위해 nexus repository를 별도로 구축하는 것과 같습니다.)

 

이번 포스팅에서는 docker registry 이미지를 이용해 Private Container Registry 만드는 것을 실습해 보도록 하겠습니다.

 

 

Docker registry Images 가져오기

이미지(image) 형태로 배포되는 registry 이미지를 pull 하도록 합니다.

 

정상 생성되었는지 확인 해 보도록 합니다.

docker images registry

 

 

 

Docker registry 실행

docker hub로부터 가져온 registry 이미지를 실행시켜 private container image를 관리 할 수 있는 registry 서버를 실행 시킵니다.

 

docker run --name [만들고자 하는 컨테이너명] -d -p [로컬서버포트:이미지노출포트] registry

docker run --name local-registry -d -p 5000:5000 registry

 

docker ps를 통해 실행된 registry를 확인해 보도록 합니다.

docker ps

 

 

Docker 환경 정보 파일에 private container registry 정보 입력

dockerfile로부터 base container 이미지를 가져올때 기본 값은 인터넷의 docker hub 입니다. 우리는 private container registry를 만들고 있으므로 이미지를 가져오는 기본 값을 private container registry 서버 정보로 바꿔야 합니다.(maven의 pom.xml에 사설 네트워크 망에 있는 nexus 주소를 입력하는 것과 같은 개념입니다.)

 

로컬에 설치된 docker engine이 위와같이 기본 서버 정보를 찾는 파일은 daemon.json파일이며 이 파일은 docker가 설치된 운영체제 별로 다음의 위치에서 찾을 수 있습니다.

 

windows %USERPROFILE%\.docker\daemon.json
linux /etc/docker/daemon.json
mac os $HOME/.docker/daemon.json

 

damon.jon 파일을 열어 아래의 내용을 json 포맷에 맞게 추가하도록 합니다.

 

"insecure-registries":["localhost:5000"]

daemon.json

 

위 내용은 "registry 기본값으로 localhost:5000번 포트의 서버를 가장 먼저 조사하도록 하겠다"라는 의미입니다.

이 내용을 입력하였다면 docker engine을 재 시작 하도록 합니다.

 

 

샘플 어플리케이션 및 Dockerfile 작성

node js기반 간단한 샘플 어플리케이션을 아래와 같이 개발 하시기 바랍니다.

server.js

///////////////////////////////
//server.js
var http = require('http');
var handleRequest = function(request, response) {
    console.log('Received request for URL: ' + request.url);
    response.writeHead(200);
    response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);

 

위 node.js 어플리케이션을 실행할 컨테이너 이미지를 만들기 위해 Dockerfile을 아래와 같이 작성합니다.

FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js > log.out

 

Dockerfile을 이용한 Docker image 생성

아래와 같은 명령어를 통해 Docker Image를 생성하도록 합니다.

 

docker build -t localhost:5000/server:1.0 .

 

-t 뒤에 붙은 localhost:5000/server:1.0의 의미는 이 이미지를 찾을 registry서버(localhost:5000)와 어플리케이션 명(server) 그리고 그 어플리케이션의 버전(:1.0)을 의미합니다.

 

이렇게 생성된 이미지를 아래의 명령어를 통해 조회해 보도록 합니다.

 

docker images localhost:5000/server:1.0

 

 

Docker image를 private registry에 등록

위와 같이 생성된 image를 private registry에 등록해 보도록 하겠습니다.

 

docker push [생성된 이미지명과 등록될 서버주소]

docker push localhost:5000/server:1.0

 

이를 종합해 보면 내가 만든 [private registry 서버명:포트/]가 이미지를 등록할 때 접두어로 사용되어야 한다는 것을 알 수 있습니다.

이렇게 생성된 등록된 이미지는 또다른 도커 이미지를 만들때 base image(FROM localhost:5000/hello:1.0 )로 사용될 수 있거나 혹은 Kubernetes의 Pod를 만들 때 사용될 수 있습니다.

이에 대해서는 추후 포스팅을 하도록 하겠습니다.

 

 

이번 포스팅은 여기까지 입니다.

 

감사합니다.

 

반응형

'Application Modernization > Container & PaaS' 카테고리의 다른 글

Kubernetes (쿠버네티스) 란?  (0) 2021.09.30
Docker Image Repository  (0) 2021.09.29
자주쓰는 Dockerfile 명령어  (0) 2021.09.14
Dockerfile 로 docker image 작성  (0) 2021.09.14
Docker로 Tomcat MySQL 실행  (0) 2021.09.14

+ Recent posts