기존에 개발하던 프로젝트에 docker-compose를 적용시켜보았다. 추가로 Nginx를 띄워 3개의 spring server에 로드밸런싱도 해보았다. 그 전에 docker compose 실행 종료 명령어에 대해 정리해보았다. 도커는 기본적으로 캐싱을 수행하기 때문에 docker compose를 실행했을 때 수정 사항이 적용되지않는 경우가 종종 있었다. 따라서 아래와 같은 명령어로 실행, 종료를 권장한다. 실행: docker compose up --force-recreate 종료: docker compose down --rmi all Spring boot + MariaDb application.yml spring: datasource: driver-class-name: org.mariadb.jdbc.D..
Docker Compose 란? 응집력 있는 애플리케이션으로 함께 작동하는 여러 컨테이너를 실행하려는 로컬 개발 및 테스트 환경을 위해 설계된 도구 docker compose yaml코드는 여러 개의 docker run 실행과 유사하며 네트워크, 볼륨 등을 한번에 생성할 수 있다. docker compose로 생성된 컨테이너들은 독립된 네트워크로 구성되므로 컨테이너 간 통신이 쉽다. Docker file 작성 -> docker-compose.yml 작성 -> docker compose up 장점 서로 다른 OS환경이라도 동일한 환경구성이 가능하다. 동일한 환경을 사용하기 때문에 개발환경에 이슈가 발생해도 팀간 소통이 쉽다. 복잡한 환경도 YAML 코드로 스크립트화 할 수 있기 때문에 자동화가 가능하다. ..
IaC (Infrastructure as Code, 코드형 인프라)가 필요한 이유 커맨드 기반의 인프라 구성 시 사용자 실수 등의 인적 오류 가능성이 높음. 설치 순서와 상호 연관성 등을 고려하여 각종 라이브러리와 함께 복잡한 명령어들을 고민하게 되는데 코드형 인프라로 해결 가능. 수정사항은 언제든 코드 변경을 통해 가능하다. 따라서 개발 업무 목적을 이루는 것에만 온전히 집중할 수 있다. IaC는 탄력성, 확장성, 반복성을 부여하게 되어 눈송이 서버가 아닌 동일한 환경을 보유한 서버(컨테이너)를 수십~수백대를 운영, 관리하게 해준다. 눈송이 서버: 실제 운영 환경은 다양한 서버를 갖고 있다. 개발서버, 테스트서버, 운영서버 등이 있는데 운영을 하다보면 여러가지 변경 사항이 있다. 이때 똑같은 setup..
Docker DNS Docker 컨테이너는 IP를 사용자 정의 네트워크의 컨테이너 이름으로 자동 확인하는 DNS 서버가 Docker 호스트에 생성된다. 동일 네트워크 alias 할당을 통해 하나의 타겟 그룹을 만들어 요청을 Round Robin 방식으로 응답한다. 예제로 만나보자 사용자 정의 네트워크 생성 docker network create fc-net 하나의 fc-net 네트워크에 포함된 컨테이너 2개 생성, 논리적인 타겟 그룹 생성 docker run -d --name=es1 --net=fc-net --net-alias=esnet-tg -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" elasticsearch:7.17.10 docker run ..
Docker image는 Container runtime에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고 변경되는 상태 값을 보유하지 않고(stateless) 변하지 않는다.(Immutable, Read Only) Docker image 관련 명령어 workflow 이미지 내려받기 docker pull [options] name:[tag] 만약 docker pull busybox 라는 명령어를 친다면 tag는 기본적으로 latest, 경로는 docker.io/library 로 설정된다. 즉 기본적으로 docker.io가 default registry로 등록되어 있다. 이미지의 구조 확인 이미지는 layer 구조이다. 맨 위에서 말했드시 이미지는 불변 즉, read only 형태로 만들어진다 그렇..