• 검색 결과가 없습니다.

5. 마이크로 서비스 배포

5.3 S PRING B OOT 애플리케이션 도커 이미지 변환

5.3.3 도커 이미지 변환

# apache 를 foreground 로 실행

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

5.3.3.2 Dockerfile 생성

“카탈로그 서비스” 프로젝트 폴더에 Dockerfile 을 생성한다.

FROM java:8

해당 프로젝트가 Java 응용 프로그램이므로 모든 Java 관련 라이브러리를 가져와서 컨테이너에 추가함.

EXPOSE 8081

액세스하기 위한 포트를 지정함.

ADD ./target/Catalogs-1.0.0.jar catalog.jar

대상 프로젝트(./target)의 JAR 파일(Catalogs-1.0.0.jar)을 이미지의 파일

시스템에 추가함.

ENTRYPOINT ["java","-jar","catalog.jar"]

도커 내에서 JAR 파일을 실행함.

5.3.3.3 도커 이미지 변환

Dockerfile 을 만든 디렉토리로 이동해서 다음 명령을 실행한다.

$ docker build -t catalog .

docker build 명령의 형식은 docker build <옵션> <Dockerfile 경로>이다.

위에서 사용된 -t(또는 --tag) 옵션은 저장소 이름, 이미지 이름, 태그를 설정한다.

형식은 <저장소 이름>/<이미지 이름>:<태그>로 위에선 “catalog”로 이미지 이름을 지정했다. 마지막에 점(.)은 Dockerfile 의 위치를 경로를 지정하는데 파일 이름이 Dockerfile 이 아닌 경우 -f(또는 --file) 옵션을 사용해서 파일 이름을 지정한다.

docker build 명령을 실행하면 도커 이미지가 생성되고 컨테이너에 로드된다.

$ docker images

docker images 명령으로 현재 도커에서 사용 가능한 이미지 목록을 확인할 수 있다.

더하여 -a 옵션을 추가하면 도커 빌드 중에 생성되어서 이름과 태그가 지정되지 않은 중간 이미지 목록도 확인할 수 있다.

생성된 도커 이미지는 docker run 명령으로 실행할 수 있다.

$ docker run -d --name catalog-container -p 8081:8081 catalog

위에서 사용된 -d 옵션은 컨테이너를 백그라운드에 실행한다. 그리고 --name 옵션은

컨테이너 이름을 설정한다. -p 옵션을 이용해 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 설정한다. 여러 개의 포트 설정이 필요하면 -p 옵션을 여러 번 사용할 수 있다. 아래처럼 -p 옵션을 사용할 수 있다.

<호스트포트>:<컨테이너포트> 예) -p 8081:80

<IP 주소>:<호스트포트>:<컨테이너포트> 바인딩할 IP 와 포트를 직접 명시 예) -p 192.168.0.100:8081:80

<컨테이너포트> 컨테이너 포트만 설정하면 호스트포트는 무작위로 설정됨 예) -p 80

만약 도커 이미지를 실행하려 할 때 호스트에 이미지가 없다면 도커 저장소(도커 허브, 도커 레지스터리 등)에서 이미지를 내려 받기만 하고 실행은 되지 않으므로 내려 받은 이미지를 확인한 후 다시 실행한다.

이제 Spring Boot 애플리케이션이 부팅되고 서버가 8081 에서 실행된다.

실행중인 컨테이너 목록은 docker ps 명령으로 확인할 수 있다. 컨테이너 목록을 보면 도커 실행 시 --name 옵션으로 설정한 컨테이너 이름을 확인할 수 있다.

백그라운드로 실행한 컨테이너는 docker stop <컨테이너명> 명령으로 중지한다.

여기서는 docker stop catalog-container 명령으로 중지할 수 있다.

위에서 사용된 도커 명령어를 포함해서 주요 명령어는 다음과 같다.

명령어 설명

$ docker -v 버전 확인

$ docker build <옵션> <이미지명> . 이미지 생성

$ docker pull <이미지명> 이미지 다운로드

$ docker images 이미지 목록

$ docker run <옵션> <이미지명> <실행할파일> 이미지 실행

$ docker rmi <옵션> <이미지명> 이미지 삭제

$ docker create <옵션> <이미지명> 컨테이너 생성

$ docker run <옵션> <이미지명> 컨테이너 생성 및 실행

$ docker start <컨테이너명> 컨테이너 실행

$ docker restart <컨테이너명> 컨테이너 재실행

$ docker attach <컨테이너명> 컨테이너 접속

$ docker stop <컨테이너명> 컨테이너 정지

$ docker ps 실행중인 컨테이너 목록

$ docker ps -a 정지된 컨테이너 목록

$ docker rename <기존 컨테이너명> <새로운 컨테이너명> 컨테이너 명 변경

$ docker rm <컨테이너명> 컨테이너 삭제