본문 바로가기
Skill Stacks/Java_Spring

[Java] Docker

by JayAlex07 2023. 9. 11.

[Java] Docker

 

 

서비스 배포란?

 

코드로 구현하고, 결과는 콘솔 또는 로컬 호스트를 통해 결과를 확인한다

  • 즉 다른 사용자들을 위한 실제 서비스가 되기에는 부족하다
  • 즉 이 코드들이 다른 사용자들이 이용할 수 있도록 배포가 되어야 한다!

 

다른 사람들이 개발자들이 만든 코드를 사용할 수 있게 만드는 것이 서비스 배포다

  • 개발자들이 만든 코드를 실행 가능한 형태로 서버 컴퓨터로 옮긴다
  • 그럼 사용자들은 서버 컴퓨터를 통해, 개발자들이 만든 코드를 사용하게 된다

 

온프레미스 (On-Premise) : 자체 서버가 있는 경우

  • 비용이 굉장히 많이 든다 (설치 비용 + 유지 비용 + 인력까지)

 

클라우드 : 다른 제 3자가 만들어 놓은 서버를 원격으로 빌려서 사용하는 것이다

  • 예) AWS
  • 대어료를 클라우드 사용자 입장에서 커스텀으로 서버를 빌려 사용할 수 있다

 

가상화 Virtualization

 

하나의 물리 시스템에서 분리된 여러 환경을 구성하는 기술

  • Virtual Machine (VM)
  • 하이퍼바이저에 의해서 Host의 자원을 사용하는 VM을 Guest라고 표현한다
  • 즉 하나의 물리 시스템에서, 다른 OS를 구성할 수 있다
    • 예) Window OS에서, 가상화를 통해서 MAC OS를 사용할 수 있다

 

물리 자원을 효율적으로 사용하기 위해 구현이 되었다

  • 한 서버의 하드웨어 자원을 최대한 활용하기 위해 사용이 된다

 

Docker

 

Docker를 사용하는 이유

  • 운영 표준화
    • 도커에는 컨테이너 개념이 있다 - 이 컨테이너를 사용하여, 배포나 운영이 수월하게 될 수 있다
    • 운영 환경이 표준화가 되어서 일관된 결과를 보장받을 수 있다
  • 높은 이식성
    • 온프레미스 환경에서 클라우드 환경으로 이전이 쉬워진다
    • 이 뿐만 아닌 컨테이너채로 이동을 하면 되기 때문에, 프로그램의 이식 자체가 쉬워진다
    • 로컬 개발 환경과 실제 배포 환경이 다른 것인 자체에서 문제가 생길 수 있지만, 도커를 사용하여 이런 문제를 많이 해소시킬 수 있다
  • 비용 절감
    • 서버 비용을 줄일 수 있다
    • 개발자가 서버 환경에 신경을 써야할 자원을 측면에서 줄일 수 있다

 

컨테이너란?

  • 시스템의 다른 어플리케이션이나 다른 부분들에 영향을 주지 않는 격리된 공간
  • 실행 환경, 라이브러리, 시스템 도구, 코드 등을 포함한다
  • 추상화 된 개념이다

 

이미지

  • 컨테이너는 이미지로부터 생성이 된다
  • 컨테이너 생성과 관련된 모든 내용이 포함된 템플릿이다
  • 실행만 하면 되는 모든 것이 포함된 것이다
  • read-only라서, 한번 생성된 이미지는 변경하면 안 된다
    • 변경하기 위해서는 이미지를 새로 빌드해야 한다
  • 도커 레지스트리 : 도커 이미지를 저장하고 다운로드 할 수 있는 저장소

 

Docker 명령어

$ docker image pull                # 레지스트리에서 이미지 가져오기
$ docker image rm                # 이미지 제거

$ docker image ls                # 이미지 조회
$ docker images                    # 이미지 조회

$ docker build                    # 도커파일로부터 도커 이미지를 빌드하는 명령어

$ docker start CONTAINER_ID        # 생성이 된 컨테이너 실행
$ docker restart CONTAINER_ID    # 생성이 된 컨테이너 재실행
$ docker stop CONTAINER_ID        # 컨테이너 종료

$ docker run [OPTIONS] IMAGE    # 컨테이너 실행 (Create + start)

$ docker compose -f {파일이름} up -d # docker-compose 실행

$ docker ps                        # 현재 컨테이너 리스트 및 상태 조회

$ docker exec -it CONTAINER_ID /bin/bash
# 실행중인 컨테이너에 명령어를 실행

$ docker logs CONTAINER            # 컨테이너 로그 확인

'Skill Stacks > Java_Spring' 카테고리의 다른 글

[Java] Kafka  (0) 2023.09.13
[Java] Linux  (0) 2023.09.12
스프링 캐시  (0) 2023.09.05
스프링 스크래핑  (0) 2023.09.04
스프링 API 문서 만들기  (0) 2023.09.03