오늘 배운 것
- docker
- docker-compose
Docker란?
- 애플리케이션 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼
- 격리된 환경인 컨테이너 기반 가상화 플랫폼
- 애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행 가능
- 애플리케이션을 격리된 환경인 컨테이너로 패키징해 실행하는 기술
- Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것을 포함
용어
Docker 이미지
- 애플리케이션과 그 실행에 필요한 모든 것을 포함하는 것
- Docker 컨테이너 생성하기 위한 설계도 역할
Docker 컨테이너
- Docker 이미지를 실행한 상태
- Docker 이미지를 가지고 Docker 컨테이너 생성
- 격리된 공간에서 애플리케이션을 실행
- 하나의 시스템에서 여러 개의 컨테이너 독립적으로 실행 가능
Dockerfile
- Docker 이미지를 생성하기 위한 스크립트
- Docker 이미지 빌드하는데 필요한 명령어들 포함
- Docker 이미지 생산 과정을 자동화하고 일관되게 만듬
특징
- 컨테이너화: 애플리케이션과 필요한 모든 것을 하나의 패키지로 묶어 어디서든 실행 가능
- 경량: Docker는 운영 체제의 커널을 공유하므로, 가상 머신보다 훨씬 가볍고 빠르게 실행됨
- 이식성: Docker 컨테이너는 어디서든 동일하게 실행됨
- 확장성: Docker를 사용하면 여러 개의 컨테이너를 효율적으로 관리하고 쉽게 확장 가능
Docker 언제 사용하는지?
일관된 개발 환경이 필요할 때
- 개발, 테스트, 운영 환경이 다를 때 발생하는 문제를 피하고자 할 때 사용한다.
- Docker를 사용하면 모든 환경에서 동일한 컨테이너를 실행할 수 있어, 환경 차이로 인한 문제를 줄일 수 있다.
- 로컬에서 Docker 통해 개발 후 서버에 가도 문제가 없다.
애플리케이션을 빠르게 배포하고 싶을 때
- Docker를 사용하면 애플리케이션을 빠르고 쉽게 배포할 수 있다.
- Docker 이미지를 빌드하고 이를 컨테이너로 실행하면, 필요한 모든 구성 요소가 포함되어 있어 별도의 설치 과정 없이 바로 실행할 수 있다.
마이크로서비스 아키텍처를 도입할 때
- 각 서비스가 독립적으로 배포되고 실행될 수 있어, 여러 개의 컨테이너를 통해 다양한 서비스를 쉽게 관리할 수 있다.
- 각 어플리케이션을 하나의 Docker 컨테이너씩 올린다면 유지보수가 편해집니다.
CI/CD 파이프라인을 구축할 때
- 코드를 변경할 때마다 자동으로 빌드, 테스트, 배포할 수 있도록 설정할 수 있다.
- 이를 통해 개발 주기를 단축하고 배포의 신뢰성을 높일 수 있다.
리소스 효율성을 높이고 싶을 때
- Docker 컨테이너는 가상 머신보다 적은 리소스를 사용한다.
- 운영 체제의 커널을 공유하므로, 더 많은 애플리케이션을 동일한 하드웨어에서 실행할 수 있다.
애플리케이션 격리가 필요할 때
- 여러 애플리케이션을 독립적으로 실행하고자 할 때 Docker를 사용하면 각 컨테이너가 서로 격리되어 실행된다.
- 이를 통해 애플리케이션 간의 충돌을 방지하고 보안을 강화할 수 있다.
쉽게 스케일링하고 싶을 때
- 컨테이너 기반의 애플리케이션을 쉽게 확장할 수 있다.
- 필요한 만큼 컨테이너를 추가하여 수평 확장이 가능하다.
- 오케스트레이션 도구와 결합하여 자동 확장도 가능합니다.
쿠버네티스(Kubernetes)와 함께 사용하고자 할 때
- 쿠버네티스는 컨테이너 오케스트레이션 도구다.
- 쿠버네티스는 다수의 Docker 컨테이너를 관리하고 자동 배포, 확장, 운영을 지원한다.
Docker-Compose
- 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구다.
- Docker 컨테이너가 많아지면 헷갈린다.
- Docker-compose로 하나의 파일에서 많은 컨테이너 모두 조작할 수 있다.
- Docker 컨테이너 여러 개 각각 실행할 때의 헷갈림을 방지하고 더 편하게 한번에 조작할 수 있게 하는 것이다.
나의 생각
지금까지 늘 도커는 어려운 기술이라는 생각이 있었다.
정리하는 지금까지도 위의 글들을 보면 뭐하는 기술인지 잘 이해가 되지 않는다.
이해한 것을 정리해보면 아래와 같다.
- Dockerfile이라는 것으로 Docker 이미지를 생산한다.
- Docker 이미지에는 어플리케이션에 필요한 모든 것이 담겨 있고 이것으로 Docker 컨테이너 생성한다.
- Docker 컨테이너는 격리된 환경에서 어플리케이션을 실행하는 것이다.
- Dockerfile이라는 것만 있으면 Window던 Mac이던 어디던 어플리케이션을 동일하게 빠르게 실행할 수 있다.
- Docker를 지금까지 개발을 시작할 때 Window와 Mac이 환경이 달라서 생기는 오류를 줄이고 같은 환경에서 개발할 수 있게 도와주는 것이라고 생각했다.
- 그런데 이렇게 사용하는 것은 잘 그림이 그려지지 않는다...
- Docker 이미지로 같은 환경을 설정해 놓는다 → Docker 이미지를 각자 다운 받는다 → ??
- Docker 이미지는 어플리케이션 컨테이너의 설계도인데 이것을 받아서 어떻게 개발을 시작하는지....?
- 이부분이 잘 이해가 안되고 좀 더 알아보고 직접 사용해 봐야 할 것 같다.
- 대신 Docker가 배포할 때는 유용할 것 같다는 생각이 들었다.
- 서버에서 Docker 이미지 가지고 쉽게 Docker 컨테이너 실행 시켜 어플리케이션 실행 시킬 수 있다고 생각했다.
- Docker 없으면 아래와 같은 여러 과정 거쳐야 한다.
- 서버에 필요한 것 (자바, redis, MySQL...) 다 설치
- java jar 명령어로 빌드 파일 실행
- ...
- 또 CI/CD에서 유용하고 쉽게 배포할 수 있을 것 같다.
- 또 MSA를 도입할 때 Docker로 많은 도움 받을 것 같다는 생각을 했다.
- 각 어플리케이션들에 대한 Docker 이미지만 가지고 쉽게 여러 어플리케이션을 실행 시킬 수 있을 것 같다.
- 한 어플리케이션이 여러 개 필요하다면 Docker 이미지로 쉽게 여러 개 띄울 수 있을 것 같다.
Docker는 좀 더 깊게 공부해보고 사용해봐야 할 것 같다.
Docker는 개발에 매우 도움이 되는 기술인 것은 맞는 것 같다.
Docker는 쉬운 편이고 쿠버네티스가 정말 어렵다는데 걱정이 든다....
'TIL' 카테고리의 다른 글
24.08.19 TIL - Redis (0) | 2024.08.20 |
---|---|
24.08.14 TIL - GitHub Actions (1) | 2024.08.16 |
24.08.12 TIL - MSA 구성 요소들 (2) | 2024.08.13 |
24.08.09 TIL - 서킷 브레이커 & Resilience4j (1) | 2024.08.10 |
24.08.08 TIL - 스프링 소셜 로그인 코드 리팩토링 (0) | 2024.08.09 |