본문 바로가기

Tech/[Container] Docker

비전공자도 이해할 수 있는 Docker (2)

Docker Compose의 개념

개념 정리

Docker Compose : 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션 관리 도구

특히 yaml 파일을 이용해 컨테이너 설정을 하나의 파일에서 관리할 수 있게 선언

또한 docker -d -p … 같은 긴 명령어 대신 docker compose CLI로 관리 가능

현업에서 자주 사용하는 Docker Compose CLI 명령어

docker compose 명령어를 사용해 정의된 compose.yml 파일을 관리할 수 있다.

up, down : 실행, 종료

up 명령어를 사용해 정의된 컴포즈 파일로 컨테이너들을 실행할 수 있다.

  • docker compose up (포그라운드 실행)
  • docker compose up -d (백그라운드 실행)
  • docker compose up --build (컴포즈에 정의된 이미지의 변경사항을 적용하기 위해 이미지를 다시 빌드해서 compose up)
  • up vs up --build 차이점 : up은 로컬에 이미지가 없어 컨테이너 실행 불가 시 최초 1번만 빌드

down 명령어를 사용해 정의된 컴포즈 파일로 컨테이너들을 종료할 수 있다.

  • docker compose down

ps : 컨테이너 조회

ps 명령어를 통해 컴포즈 파일에 정의된 컨테이너들을 조회할 수 있다.

  • docker compose ps (실행 중인 컨테이너만)
  • docker compose ps -a (모든 컨테이너)

logs : 컨테이너 로그 조회

logs 명령어를 통해 정의된 모든 컨테이너의 로그를 조회할 수 있다.

  • docker compose logs

pull : 컨테이너 이미지 다운로드

pull 명령어를 통해 컴포즈 파일에 정의된 이미지들을 다운로드 받거나 업데이트할 수 있다.

  • docker compose pull
  • 참고 : 로컬 환경에 이미지가 없으면 이미지를 다운 받고, 있으면 Dockerhub의 이미지와 다를 경우 이미지를 업데이트

Docker CLI ↔ Docker Compose 쉽게 작성

Docker CLI를 간편하게 compose.yml 로 변환할 수 있는 툴들이 많다.

따라서, 컨테이너 단위로 테스트하고, 정상적으로 동작이 확인되면 아래 툴들을 이용해 쉽게 변환할 수 있다.

Docker CLI → compose.yml로 변환

https://www.composerize.com/

compose.yml → Docker CLI로 변환

https://www.decomposerize.com/

컨테이너의 네트워크 격리를 이해하지 못했을 때 발생하는 문제

로컬에서 개발을 하다보면, 백엔드 서버 코드단에 DB 커넥션 설정 코드가 localhost 로 지정되어 있는 경우가 많다.

이런 상태에서 그대로 컨테이너화 하면 독립된 네트워크 환경을 가진 컨테이너의 특성상 DB에 접근할 수 없게 된다.

docker compose에서는 우리가 정의한 서비스 이름을 기준으로 통신이 가능하므로 compose.yml 파일에서 정의한 서비스 이름으로 커넥션 설정 코드를 변경해 줘야 한다.

이러한 이유들로 환경 변수 설정이 배포 단계에서 굉장히 중요하게 작용한다.

Docker Compose 실습 (express, redis, mysql)

테스트 내용

  • docker compose를 활용한 express, redis, mysql 연동 테스트

테스트 확인

  • docker logs 컨테이너ID 로 로그 확인해서 같이 정상적으로 로그가 출력되는지 확인

깃허브 코드

https://github.com/baobabnamu/docker_practice