docker

dockerFile이란?

winwin-k9 2023. 2. 14. 05:22

dockerFile

Dockerfile은 인프라스트럭쳐의 프로비저닝(서버 환경 셋팅)이라고 생각하면 된다. docker build라는 명령어를 통해서 Docker가 Dockerfile을 읽어서 자동으로 도커 이미지를 빌드한다.

  • 도커 컴포즈 docker run 명령어를 여러 개 모아놓은 것과 같다.
    컨테이너와 주변 환경을 생성하고 네트워크와 볼륨까지 함께 만들 수 있다.
  • Dockerfile 스크립트는 단지 이미지를 만들기 위한 것으로 네트워크나 볼륨은 만들 수 없다.
 

build 이미지를 도커 파일로 따로 만들어서 사용하는 옵션으로, image 설정 대신 사용한다.

  • context 옵션: 도커 파일이 있는 디렉터리 경로
  • dockerfile 옵션: context 옵션 경로 안에 있는 Dockerfile명

 

version: "3"
services:
  database:
    image: mysql
    environment:
      MYSQL_DATABASE: userdb
      MYSQL_USER: user      
      MYSQL_PASSWORD: userpwd
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: rootpwd
    volumns:
      - ./db/data:/var/lib/mysql
    ports:
      - 3306:3306
    restart: always
  application:
    build: .
    depands_on:
      - database
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/userdb
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: userpwd
    restart: always

 

  • version
    • Comose 파일 버전로 도커 엔진 버전별 사용가능한 버전이 존재
  • services
    • Docker Compose로 하나로 관리할 서비스들을 정의. 이들이 각각 컨테이너가 된다.
    • services 아래 설정되는 각 서비스의 이름으로 컨테이너간 통신할 수 있다.

먼저 DB 서비스을 보면

  • database
    • “database”라는 이름의 서비스
    • 백엔드에서 DB 설정을 한다면 hostname에 이 값을 사용할 수 있다.
    • image
      • mysql 기반 이미지 사용
    • environment
      • 해당 컨테이너에서 사용할 환경변수 설정
      • mysql 이미지는 컨테이너의 환경변수를 참조하여 MySQL DB, 유저 정보등을 구성함
    • volumns
      • 호스트의 파일시스템과 도커 컨테이너의 파일시스템을 마운트함
      • DB 데이터 유지를 위해 필수적으로 설정되야함
    • ports
      • 호스트의 포트와 컨테이너의 포트를 매핑함
    • restarts
      • 오류 등으로 컨테이너가 종료됐을때 재시작 여부

 

다음은 Spring Boot 애플리케이션 컨테이너에 대한 설정이다.

  • application
    • “application”라는 이름의 서비스
    • build
      • Dockerfile을 이용해 컨테이너화 할 때 사용하는 옵션
      • 위 database 컨테이너와 달리 Dockerfile을 빌드하여 컨테이너화 해야하기 때문에 사용
      • Dockerfile이 docker-compose.yml 파일과 다른 경로에 있을경우엔 “.” 대신 해당 경로 지정
    • depends_on
      • 각 서비스간 종속성을 두어 실행 순서를 정할 수 있다.
      • 이 예시에선 DB가 먼저 올라가야하기 때문에 “database” 서비스에 의존성을 갖게함
    • environment
      • database 설정과 동일하게, 환경변수를 컨테이너 내부에 세팅해주기 위해 사용한다.
      • 프로젝트에서 채택한 방식에 따라 적절하게 설정해준다.
    • restarts
      • 위와 동일
728x90