로컬에서 만들었던 스프링부트 프로젝트를 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 생성, 파일 위치는 프로젝트 바로 밑에 )
- 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 한 후에 동작시켜줍니다.
4. 로컬에서 이미지 push
5. ssh에서 이미지 pull 하기
- 받고자 하는 ssh 서버에서 docker image pull 명령어를 사용하여 push된 이미지를 가져옵니다.
- 이 때, 자신의 서버이니까 기존에 적어두었던 192.168.101.183이 아닌 localhost로 바꿔서 이미지 pull을 합니다.
6 . 이미지 기동시키기
- 실행 안됨 : 5000번 포트 뒤에 컨테이너 포트 명세해주어야 합니다.
< 프로젝트 실행 안됐던 요인들>
1. 포트번호 바꾸고 새로 프로젝트 build 하지 않음
- 예전에 8080으로 쓰던 포트를 5050으로 변경했었다. 하지만 application.properties 변경 후에 깜박하고 새로 build 해주지 않아서 전의 포트 정보로 연결하려 했기 때문.
해결 : mvn clean package 로 프로젝트 빌드 새로 해준 후에 이미지 생성하기
2. jar 파일을 찾을 수 없다는 에러
- Dockerfile에 ADD 속성이 없어서 난 에러였다. ADD 속성은 현재 jar파일을 새로운~. jar파일로 이미지에 적재해주는 속성인데,, 이것을 빼먹음..
해결 : Dockerfile에 ADD 속성 추가
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 |