본문 바로가기

Jenkins & Docker

Docker의 Private registry 통해 ssh 서버로 이미지 배포

로컬에서 만들었던 스프링부트 프로젝트를 Docker를 이용하여 이미지를 배포해보았습니다.

* ssh 서버는 centos7을 사용합니다*

 

💡배포 순서

1. private registry 구축

2. 프로젝트 이미지로 빌드

3. ssh 서버와 연결하기 위한 설정 

4. 이미지 push 

5. ssh에서 pull 하여 이미지 가져오기 

6. 도커 이미지 기동     

 


< 과정 >

 

1. private registry 구축

 

  - docker pull registry : private registry 구축을 위해 registry 이미지를 pull 합니다.

 

 - docker images 명령어로 현재 registry라는 이미지가 pull 된것을 볼 수 있습니다.

 

 

 

 

2. 프로젝트 이미지로 빌드

(선행작업 : mvn clean package로 프로젝트 빌드 후 Dockerfile 생성, 파일 위치는 프로젝트 바로 밑에 )

 

Dockerfile

 

- docker image build 명령어를 써서 192.168.101.183:5000/restapi 라는 이름의 이미지를 만들어주기

- docker tag 명령어를 사용해서 같은 이미지 tag를 걸어주는데, 여기서 중요한 점은 Private registry에 올리는 경우

ip주소:포트번호 형식을 따릅니다. (단, 도커허브에 올리는 경우엔 ip주소:포트번호 대신 도커 계정 id를 넣어줍니다.)

 

 

 

 

 

3. ssh 서버와 연결하기 위한 설정

 

1 ) 설정

- docker desktop을 열어서 setting 메뉴 - Docker Engine의 daemon.json 파일에 'insecure-registries' 항목에 이미지를 보낼 ssh서버 ip와 port번호(이미지 tag로 두었던)을 추가해줍니다.

- 저장 및 재시작

 

2 ) ssh 에서 5000번 포트로 컨테이너 기동

 

- docker container run -d --restart=always -p 5000:5000 -v /registry:/var/lib/registry/docker/registry/v2 --name registry registry:latest

- registry라는 이미지를 registry라는 컨테이너에서 기동시키고 5000번 포트를 사용하며 restart 한 후에 동작시켜줍니다.

 

 

docker ps 명령어로 현재 기동중인 것을 확인

 

curl -X GET 명령어로 조회해본 결과 이미지가 아무것도 push되지 않음을 확인

 

 

 

 

 

4. 로컬에서 이미지 push

 

docker image push 명령어를 사용하여 build한 이미지를 push 해줍니다.

 

이미지가 들어간 것을 확인

 

 

 

 

5. ssh에서 이미지 pull 하기

 

- 받고자 하는 ssh 서버에서 docker image pull 명령어를 사용하여 push된 이미지를 가져옵니다.

- 이 때, 자신의 서버이니까 기존에 적어두었던 192.168.101.183이 아닌 localhost로 바꿔서 이미지 pull을 합니다.

 

localhost:5000/api-servie 라는 이미지가 다운받아진 것을 확인

 

 

 

 

 

6 . 이미지 기동시키기

 

docker run 명령어로 실행

- 실행 안됨 : 5000번 포트 뒤에 컨테이너 포트 명세해주어야 합니다.

 

실제 실행시킨 명령어

 


< 프로젝트 실행 안됐던 요인들>

 

1. 포트번호 바꾸고 새로 프로젝트 build 하지 않음

- 예전에 8080으로 쓰던 포트를 5050으로 변경했었다. 하지만 application.properties 변경 후에 깜박하고 새로 build 해주지 않아서 전의 포트 정보로 연결하려 했기 때문.

 

해결 : mvn clean package 로 프로젝트 빌드 새로 해준 후에 이미지 생성하기

 

 

2. jar 파일을 찾을 수 없다는 에러

- Dockerfile에 ADD 속성이 없어서 난 에러였다. ADD 속성은 현재 jar파일을 새로운~. jar파일로 이미지에 적재해주는 속성인데,, 이것을 빼먹음..

해결 : Dockerfile에 ADD 속성 추가

 

수정후 Dockerfile

 

3. 컨테이너 포트번호

- 이미지 생성은 registry 포트번호은 5000번으로 만들어주는 것은 맞지만 , 프로젝트 build 당시 server.port= 5050 이기 때문에, 실제로 ssh서버에서 띄울 포트 :  컨테이너 포트, 둘 다 명시해주어야 했는데 그냥 -p 5050 으로만 해서 실행이 되지 않았다!

해결 :

                     * docker run -옵션 <host port number> : <container port number> 이미지명 *

'Jenkins & Docker' 카테고리의 다른 글

Jenkins로 spring-boot 프로젝트 빌드하기  (1) 2021.07.07
Gitlab, Jenkins, Docker 작동 원리  (1) 2021.06.01