Docker Compose 사용법

SummerToday·2024년 2월 23일

도커, 서버 기술

목록 보기
20/34
post-thumbnail

Docker Compose 사용법

  • 예시 docker-compose.yml
version: "3"

services:
  app:
    build:
      context: ./01_FLASK_DOCKER
      dockerfile: Dockerfile
    links:
      - "db:mysqldb"
    ports:
      - "80:8080"
    container_name: appcontainer
    depends_on:
      - db

  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_DATABASE=db
    ports:
      - "3306:3306"
    container_name: dbcontainer

  • build
    이미지를 Dockefile을 기반으로 작성할 시 사용한다.

    • context
      Dockerfile이 위치하는 디렉토리명을 의미한다.

    • dockerfile
      Dockerfile 파일명을 의미한다.

  • links
    컨테이너 내부에서, 다른 컨테이너와 연결할 때 사용한다.

    links:
    - "db:mysqldb"

    db 컨테이너와 연결하여 컨테이너 내에서 db 또는 mysqldb라는 이름으로 사용한다.

    하지만 해당 옵션을 아예 쓰지 않아도, docker-compose.yml 파일에 기재된 각각의 컨테이너 이름으로, 각 컨테이너 내부에서 접속이 가능하다.


  • container_name
    컨테이너의 이름을 설정한다.

  • depends_on
    해당 컨테이너가 실행되기 이전에 실행될 선행 컨테이너들을 설정한다.
    하지만 해당 명령어로 설정해도 각 컨테이너의 준비 완료 시점은 설정과 다를 수 있음도 인지해야 한다.

  • docker-compose logs
    각 컨테이너의 모든 로그들을 확인할 수 있다.

  • docker-compose exec [컨테이너이름] [명령]
    docker compose 내의 컨테이너에서 명령을 실행시킬 수 있다.

    ex. docker-compose exec app /bin/bash
    docker compose 내의 app 컨테이너의 쉘을 실행시킬 수 있음.


cf. mysql은 굳이 포트를 설정해 줄 필요는 없다. 어차피 외부에서 mysql로 직접 접속할 일은 없기 때문이다.

cf. vi에서 한 줄 삭제시 : 일반모드에서 dd 입력, 이전으로 되돌리기: 일반모드에서 u 입력

cf. docker-compose.yml 작성 시 꼭 두칸씩 들여쓰기 하는 것을 지켜야 오류가 나지 않는다.


.dockerignore

컨테이너 실행을 위해 특정 필요 파일을 포함하는 폴더의 내용을 다른 디렉토리로 옮길 시 (ex. COPY ./ /app) 필요 파일을 제외한 의미없는 파일과 폴더들도 함께 옮겨지게 되는데, 이때 .dockerignore를 작성하여 다른 의미없는 파일/폴더들은 옮길 때 제외할 수 있다.

  • .gitignore와 유사한 역할을 수행한다.

  • .dockerignore 파일 포맷

      # 주석
      */Dockerfile*
      */*/Dockerfile*
      Dockerfile?
      Dockerfile*
      *.txt
      !Dockerfile.txt
    • #
      주석을 의미한다.

    • */Dockerfile*
      현재 폴더의 하위 폴더에서 Dockerfile로 시작하는 파일/폴더는 제외시킨다.

      ex. /root/Dockerfile.txt


    • */*/Dockerfile*
      현재 폴더의 하위 폴더의 하위 폴더에서 Dockerfile로 시작하는 파일/폴더는 제외시킨다.

      ex. /root/one/Dockerfile.txt


    • Dockerfile?
      ?는 어떤 한 글자를 의미하므로, 현재 폴더에서 Dockerfile1과 같은 파일/폴더들을 제외한다.

    • Dockerfile*
      현재 폴더에서 Dockerfile로 시작하는 파일/폴더들을 제외한다.

    • *.txt
      현재 폴더에서 .txt 확장자를 가지는 파일들을 제외한다.

    • !Dockerfile.txt
      !는 해당 파일은 제외 조건에서 열외한다는 의미이다.
      따라서 Dockerfile.txt는 제외되지 않는다.




해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다.
인프런, 잔재미 코딩, ⌜풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]⌟
profile
블로그 이관했습니다.

0개의 댓글