본문 바로가기
CICD

docker-compose

by 장중앙 2023. 4. 8.

Docker-compose

각각의 docker 이미지를 사용해 여러 개의 컨테이너를 관리할 수 있는 기능

  • 내부 정의한 컨테이너 간 연결 밑 가상 네트워크 관리가 쉬움

1회 실행하는 것으로 내부 정의한 모든 컨테이너 서비스를 실행 가능

  • 이미지로 컨테이너를 시작하는 것이 아니라면 dockerfile을 가지고 있어야함

.yml 형식(docker-compose.yml)으로 작성해야하며 들여쓰기와 key : value로 문법이 이뤄짐

docker-compose.yml의 예제

# docker-compose.yml
 
version : "3"
# 항목 밑에 각각의 컨테이너를 정의
services:
  database:
		# 로컬 또한 docker hub에서 베이스 이미지를 지정
    image: mysql
    security_opt:
      - seccomp:unconfined
		# 컨테이너 이름 지정
    container_name: mydb
		# 컨테이너의 환경 변수를 지정
    environment:
      - MYSQL_DATABASE=portfolio
      - MYSQL_ROOT_HOST=%
      - MYSQL_ROOT_PASSWORD=1234
		# DockerFile의 ENTRYPOINT와 동일하게 컨테이너가 시작되었을 때 실행할 스크립트
		# DockerFile보다 우선 순위가 높음 
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
		# 
    ports:
      - 3306:3306
		# DockerFile에서 사용되는 Volume과 동일 
		# 마지막에 :ro를 추가하는 것으로 읽기전용 설정가능
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - web-network
 
  application:
		# image가 아닌 정의한 DockerFile을 이용해 build 후 베이스 이미지로 지정
    build: .
    restart: always
    ports:
      - 8080:8080
    volumes:
      - db_data:/var/lib/spring
		# 서비스 간 종속성 설정으로 실행할 서비스 순서를 지정가능
		# 아래 경우에는 현재 'web' 컨테이너 이전에 database service를 먼저 시작
    depends_on:
      - database
    container_name: web
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mydb:3306/portfolio?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&&allowPublicKeyRetrieval=true
      SPRING_DATABASE_USERNAME: root
      SPRING_DATABASE_PASSWORD: 1234
    networks:
      - web-network

# network 정의  networks :  'network 이름'으로 정의 가능
# 이미 network를 생성했다면 아래 구문 삭제 가능
# service정의 시, 같은 network에 포함된 서비스들은 통신 가능
networks:
  web-network:
# Volume 정의
volumes:
  db_data:

위와 같이 작성하여 한번에 여러개의 컨테이너 정의 및 실행 가능

Docker-Compose 명령어

 

docker-compose pull  .yml 내의 이미지를 모두 다운
docker-compose build .yml내 정의한 dockerfile을 빌드
docker-compose up .yml을 기반으로 컨테이너 실행
docker-compose ps 실행중인 서비스 목록 출력
docker-compose logs [service명] 실행 중인 서비스의 로그를 출력
-f 옵션으로 실시간 출력 가능
docker-compose stop [service명] 실행중인 컨테이너를 멈춤
docker-compose exec [service명] {command} 해당 컨테이너에 명령어를 실행
{command}에 bash 를 입력하면 해당 컨테이너 내부로 연결
docker-compose down [service] 서비스 정지 및 컨테이너 삭제
-v 옵션으로 볼륨까지 삭제 가능

'CICD' 카테고리의 다른 글

jenkins container - Spring 프로젝트 SonarQube 연동  (0) 2024.03.10
jenkins container - Vue 프로젝트 EC2 배포  (0) 2024.03.03
Docker와 DockerFile  (2) 2023.04.08
[Kubernetes] Autoscaler(HPA)  (0) 2022.02.17
[Kubernetes] Ingress(Controller)  (0) 2022.02.08

댓글