1. 환경
- 서버: virtual box, 우분투 19.04 서버
- 로컬: 우분투 19.04 desktop, openjdk 12, maven 3.6.0, docker 18.09
우분투 기준 설치 방법
virtualbox
$sudo apt-get install virtualbox
openjdk
$sudo apt-get install openjdk-12-jdk
maven
$sudo apt-get install maven
docker
$sudo apt-get install docker.io
* docker 실행시 sudo 없애기
$sudo usermod -aG docker hsoo
2. Spring boot app 만들기
- 만들어볼 Web app 은 spring boot를 이용하여 "/" -> "hello"를 리턴하는 서버를 만듬
- 배포 할 앱을 빌드하여 실행 가능한 jar 파일을 만듬
maven build cli
$mvn package
단위 테스트를 생략
$mvn -DskipTests package
// 빌드 후 파일은 ./target 폴더에 위치하게 됨
3. Docker image build
- Dockerfile을 만듬
- Docker image를 만듬
Dockerfile
FROM openjdk:12
RUN mkdir /app
WORKDIR /app
COPY target/*.jar /app/app.jar
Docker image build
// Dockerfile과 같은 위치에서
// 현재 폴더 하위에 target 폴더가 있고 그 안에 빌드된 jar 파일이 있어야 함
// sudo 생략, test라는 이름의 image가 만들어짐
$docker build . -t test
Docker image 확인
$docker images
// 결과로 image 목록에 test 가 있어야 함
Docker image 실행 확인
// 빌드된 image내부 포트 8080을 외부 8080과 연결하여 test를 실행함
// 외부에서 8080포트로 접근하면 docker container 내부의 8080 포트로 연결됨
$docker run -p8080:8080 test
4. Docker image를 Docker에 upload
- tag 명을 이미지를 업로드할 서버에 맞춰 수정함
- registry를 미리 준비 해야함
- 여기서는 gitlab의 registry를 이용하겠음
- docker image를 registry (docker 서버)에 push 함
docker image upload
docker image 이름 변경
// test라는 이름의 image를 업로드할 registry 이름에 맞춰 변경함
// gitlab의 경우 registry.gitlab.com/<사용자 ID>/<Custom image name>
$docker tag test registry.gitlab.com/hsoo3289/test-image
// image 이름이 변경되었는지 확인
$docker images
docker registry에 로그인
// docker login <registry url> 입력 후 아이디 패스워드를 이용해 로그인 함
$docker login registry.gitlab.com
docker image를 푸쉬
$docker push registry.gitlab.com/hsoo3289/test-image
5. Docker image 배포
- 서버에 ssh 접속
- 배포 대상 서버에 docker 설치
- docker image를 다운 및 설치
Docker image
서버에 접속
$ssh <server ipaddress>
Docker 설치
$sudo apt-get update && apt-get install docker.io -y
Docker image 다운 및 실행
$docker run -p80:8080 registry.gitlab.com/hsoo3289/test-image