gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • oauth2
  • Spring
  • 도커
  • OAuth
  • springboot
  • 슬랙알림
  • 스프링
  • nodejs
  • AWS
  • docker
  • 네스트
  • JWT
  • nestjs
  • github
  • GithubActions
  • JSON
  • SlackAPI
  • 깃헙액션
  • 스프링부트
  • nest

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

[Docker] docker compose 사용해서 다중 컨테이너 띄우기
🏭 Infra/🐳 Docker

[Docker] docker compose 사용해서 다중 컨테이너 띄우기

2022. 8. 7. 00:33

왜 귀여운 고래 어디가고 징징이를 데려왔을까 싶었는데 다중 컨테이너 띄우는걸 잘 표현한 거 같다

 

 

📝 Reference

📚 도커, 컨테이너 빌드업! - 이현룡

 

 

📌 docker compose 를 사용하는 이유

  • 컨테이너가 늘어나면 늘어날 수록 docker run 으로 실행해야 할 명령어 수가 많아지며
    특히 각각의 컨테이너에 설정할 플래그가 많아질수록 더욱 더 복잡해진다
  • 이를 하나로 묶어서 한번에 서비스를 올리고 관리할 수 있도록 해주는 도구가 도커 컴포즈
  • 각 컨테이너는 독립된 기능을 가지고 공통 네트워크로 구성되어 컨테이너 간 통신이 쉽다
  • 다만 다양한 관리 기능은 없어 실제 운영 환경에서는 쿠버네티스를 사용하는 것이 더 좋다

 

 

📜 docker compose 파일 작성

루트 폴더에 docker-compose.yml 또는 docker-compose.yaml 파일을 생성한다

도커 컴포즈 파일은 yml(야믈) 코드로 작성해야 한다

 

yml 파일은 반드시 두 칸의 들여쓰기를 통해 구분이 된다 tab은 안된다

아래는 현재 프로젝트에서 사용중인 개발용 도커 컴포즈 파일 예시이다

 

📝 docker-compose.yml

version: '3.7'
services:
  redis:
    image: redis:alpine
    ports:
      - '6379:6379'

  postgres:
    image: postgres:latest
    container_name: postgres
    restart: always
    ports:
      - '5432:5432'
    env_file:
      - .env
    networks:
      - postgres

  pgadmin:
    links:
      - postgres:postgres
    container_name: pgadmin
    image: dpage/pgadmin4
    ports:
      - '8080:80'
    # volumes:
    #   - /data/pgadmin:/root/.pgadmin
    env_file:
      - .env
    networks:
      - postgres

networks:
  postgres:
    driver: bridge
  • version : 도커 컴포즈 버전을 명시한다, 버전에 따라 약간의 기능과 옵션의 차이가 있다
  • service : 실행시킬 서비스를 정의한다. 컨테이너와 동일하다고 생각하면 편하다
    • image : 도커 허브의 공식 이미지를 사용할 경우 지정
    • build : Dockerfile 의 경로를 지정한다. 도커 컴포즈 파일과 동일한 경로일 경우 점. 을 찍는다
      • context / dockerfile : 경로가 다를 경우 도커 파일 지정
    • container_name : (생략가능) 컨테이너의 이름 지정
    • ports : 호스트 포트와 서비스 내부 포트 지정
    • expose : 서비스 포트만을 노출
    • networks : 최상위 레벨의 networks에 정의된 네트워크 이름을 지정
    • volumes : 호스트 디렉토리와 서비스 내부 디렉토리를 연결, 데이터 지속성 설정
    • environment : 서비스 내부의 환경 변수 설정
    • env_file : 환경변수 파일(.env)을 가져와 환경 변수 지정
    • command : 서비스 구동 이후 실행할 명령어
    • restart : 서비스 재시작 옵션 (always: 수동 종료 제외하고 항상 재시작, on-failure: 오류 시 재시작)
    • depends_on : 서비스 간 종속성 지정, 이 옵션에 지정한 서비스가 먼저 시작됨
  • network : 해당 이름의 네트워크를 정의한다. 대역은 172.x.x.x 로 할당, 기본 드라이버는 bridge
  • volume : 최상위 레벨의 볼륨 지정

 

 

📜 자주 사용하는 docker compose 명령어

🚀 docker-compose 또는 docker compose 를 통해 도커 컴포즈를 실행할 수 있다

 

  • docker-compose up : 도커 컴포즈 실행
  • docker-compose up -d : 백그라운드로 도커 컴포즈 실행
  • docker-compose down : 컨테이너 서비스, 볼륨, 네트워크를 모두 정지시킨 후 삭제
  • docker-compose down -v : 외부 볼륨까지 전체 삭제
  • docker-compose stop {service} : 특정 컨테이너만 중지
  • docker-compose start {service} : 특정 컨테이너만 시작
  • docker-compose logs : 어플리케이션 로그 출력
  • docker-compose logs -f : 실시간 로그 출력
  • docker-compose ps : 도커 컴포즈에 정의된 모든 서비스 컨테이너 조회
  • docker-compose config : yml 파일 설정 확인
  • docker-compose pause : 컨테이너 일시 정지
  • docker-compose unpause : 컨테이너 정지 해제

 

 

📜 docker compose 실행

잘 시작된 모습

터미널이 멈추는 것을 원치 않으면 반드시 -d 플래그를 붙여서

데몬(백그라운드)으로 실행하자

 

Windows 나 macOS 환경이라면

꼭 Docker Desktop 실행 후에 도커 컴포즈 명령어 입력하시구요

 

끝

저작자표시 (새창열림)

'🏭 Infra > 🐳 Docker' 카테고리의 다른 글

[Docker] docker compose로 다중 컨테이너 연결 시 Connection to localhost:5432 refused 에러  (0) 2022.08.07
[Docker] Dockerfile 명령어로 스프링 프로젝트 도커 이미지 빌드 및 푸시  (0) 2022.08.05
    '🏭 Infra/🐳 Docker' 카테고리의 다른 글
    • [Docker] docker compose로 다중 컨테이너 연결 시 Connection to localhost:5432 refused 에러
    • [Docker] Dockerfile 명령어로 스프링 프로젝트 도커 이미지 빌드 및 푸시
    gengminy
    gengminy
    코딩

    티스토리툴바