Docker 가 보편화 되기 이전에는 개발 환경 셋팅에 정말 많은 공수가 필요 했습니다.

하지만 Docker는 애플리케이션과 그 의존성을 컨테이너로 패키징하여 독립성과 경량화 장점을 갖고 있습니다.

물론 빠른 배포, 빠른 스케일링 장점도 있지만 우선 Docker 환경에서 컨테이너를 올려보겠습니다

 

그러면 mysql 컨테이너를 만들어보겠습니다.

 

어떻게 Docker 환경에서 mysql 컨테이너를 생성할 수 있을까요?

우선 컨테이너의 생성을 위한 순서는 아래와 같습니다.

1. docker-compose.yml 파일 생성

2. Dockerfile 생성

3. docker-compose up 명령어 실행

    - 1) Dockerfile 정의 내용을 기반으로 이미지 빌드

    - 2) 이미지를 사용하여 컨테이너 생성 및 실행

4. 생성 컨테이너 확인

 

위의 순서에 맞게 하나씩 진행 해보겠습니다.

 

(그림. 프로젝트 디렉토리)

 

1. 프로젝트 최상위 디렉토리에 docker 디렉토리 및 docker-compose.yml 파일 생성 (그림. 프로젝트 디렉토리)

  • 저는 스프링 부트 프로젝트 입니다.
version: '1'

services:
  mysql:
    build:
      dockerfile: mysql/Dockerfile
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 1234
    ports:
      - "3306:3306"
  • service:mysql:builder:dockerfile 에 Dockerfile 경로를 입력 해주세요(mysql/Dockerfile)

 

2. docker 디렉토리에 mysql 디렉토리 및 Dockerfile 생성 (그림. 프로젝트 디렉토리)

# 베이스 이미지 설정
FROM mysql:latest
  • Dockerfile 사용 예시를 공유하기 위해 베이스 이미지 설정만 추가 했습니다.

 

3. 프로젝트 docker 디렉토리 이동 및 docker 실행

docker-compose up -d
  • -d 옵션은 컨테이너를 백그라운드에서 실행하고 터미널 사용 제어권을 반환하는 역할을 합니다.

 

 

4. mysql 컨테이너 확인

docker exec -it mysql mysql -uroot -p
  • 해당 명령어 입력 후 비밀번호 입력 프롬프트가 표시됩니다. 이때 docker-compose.yml 에 설정한 비밀번호를 입력해주세요.

 

이렇게 Docker 환경에서 mysql 컨테이너 생성 예제가 완료 되었습니다.

 

 

컨테이너의 환경 설정을 docker-compose.yml 파일에 할지, Dockerfile에 할지 정확한 답은 없습니다.

만약 고민이 되신다면 아래 포스트를 참고 해주세요.

https://gabrielyj.tistory.com/225

 

컨테이너의 환경설정 docker-compose.yml 이랑 Dockerfile 중 어디가 적합하지?

Docker 컨테이너 생성 시 환경설정을 어디에 할지 고민이 될 수 있습니다.

이럴 때에는 장/단점을 따져보고 결정하는게 맞을 것 같습니다.

 

 

docker-compose.yml 환경설정

[장점]

  • docker-compose.yml 파일은 여러 컨테이너 및 서비스를 정의하고 관리하기가 편리합니다.
  • 컨테이너 간의 의존성을 쉽게 정의하고 관리할 수 있습니다.
  • 환경 설정을 외부화하여 수정 및 유지 관리가 용이합니다.

[단점]

  • 컨테이너에 대한 상세한 설정을 docker-compose.yml 파일에 직접 작성해야 합니다.
  • 복잡한 설정을 다루기에는 docker-compose.yml 파일이 적합하지 않을 수 있습니다.

 

 

Dockerfile 환경설정

[장점]

  • Dockerfile을 사용하여 컨테이너의 이미지를 빌드할 때 더 많은 제어권을 가질 수 있습니다.
  • 구체적인 설정을 Dockerfile 내에서 관리하고 변경할 수 있습니다.

[단점]

  • Dockerfile을 직접 작성하고 관리해야 하므로 일부 개발자들에게는 복잡할 수 있습니다.
  • 다른 컨테이너 서비스와의 의존성을 정의하고 관리하기가 어려울 있습니다.

 

 

그래서 어떻게 하지?

  • 일반적으로 단일 컨테이너를 실행하는 경우에는 docker-compose.yml 파일을 사용하는 것이 더 효율적일 수 있습니다.
  • 복잡한 환경에서 컨테이너 간의 복잡한 의존성이 있거나, 세부적인 커스터마이징이 필요할 경우 Dockerfile을 사용하는 것이 효율적일 수 있습니다.

Dockerfile와 docker-compose.yml 파일의 차이

도커를 생성하셨으면 이제 실제 애플리케이션을 컨테이너화 해야됩니다.

이때 사용되는 파일은 Dockerfile 과 docker-compose.yml 파일입니다.

두 파일 모두 컨테이너화를 위해 사용되는데 서로 다른 목적과 사용 사례를 갖고 있습니다.

 

Dockerfile 이란?

  • 개별 컨테이너 정의 : 단일 도커 이미지를 정의하는데 사용됩니다. 이미지는 컨테이너를 시작하는데 사용되는 템플릿입니다.
  • 컨테이너 빌드 지시사항 : 컨테이너를 빌드하기 위한 지시사항을 포함합니다. 기본 이미지, 작업 디렉토리, 파일 복사, 환경 변수 설정 등을 포함합니다.
  • 단일 서비스 정의 : 사용하면 하나의 서비스 또는 애플리케이션의 컨테이너를 정의합니다. 보통 하나의 Dockerfile은 하나의 애플리케이션을 컨테이너화하기 위해 사용됩니다.

docker-compose.yml 이란?

  • 다중 컨테이너 애플리케이션 정의 : 파일은 다중 컨테이너 애플리케이션의 전체 구성을 정의하는 데 사용됩니다. 여러 서비스 또는 컨테이너를 함께 실행하고 관리할 때 유용합니다.
  • 서비스 간 의존성 관리 : 서비스 간의 읜존성과 상호 작용을 정의합니다. 이를 통해 여러 컨테이너를 함께 시작하고 관리할 수 있습니다.
  • 환경 설정 및 네트워크 구성 : 각 서비스의 환경 변수, 포트 맵핑, 불륨 마운트, 서비스 간의 네트워크 구성 정의 등을 설정할 수 있습니다.

 

그래서 Dockerfile 이랑 docker-compose.yml 파일의 차이가 뭐야?

  • docker-compose.yml 을 통해 다중 컨테이너 애플리케이션을 정의합니다.
  • docker-compose.yml 을 통해 생성되는 컨테이너의 설정은 Dockerfile을 통해 이루어집니다.

즉, docker-compose.yml 을 통해 전체적인 애플리케이션 컨테이너를 생성하고 각 컨테이너의 세부 설정은 Dockerfile을 사용합니다.

 

 

[docker-compose.yml 파일과 각 dockerfile 경로]

docker-compose.yml 의 위치는 1depth 로써, 각 컨테이너(mysql, rabbitmq, kafka) 의 경로에 dockerfile 이 존재합니다.

1depth/
│
└── docker-compose.yml
│
├── mysql/
│   └── Dockerfile_mysql
│
├── rabbitmq/
│   └── Dockerfile_rabbitmq
│
└── kafka/
    └── Dockerfile_kafka

 

 

[docker-compose.yml 예시]

version: '3'  # Docker Compose 파일의 버전 지정

services:  # 각 서비스를 정의합니다.
  mysql:  # 서비스 이름
    image: mysql:latest  # 사용할 도커 이미지
    container_name: mysql-container  # 컨테이너 이름
    environment:  # 환경 변수 설정
      MYSQL_ROOT_PASSWORD: <password>  # MySQL 루트 비밀번호 설정
    ports:  # 포트 매핑
      - "3306:3306"  # 호스트와 컨테이너의 포트를 매핑

  rabbitmq:
    image: rabbitmq:latest
    container_name: rabbitmq-container
    ports:
      - "5672:5672"
      - "15672:15672"

  kafka:
    image: wurstmeister/kafka:latest
    container_name: kafka-container
    ports:
      - "9092:9092"

 

 

결론

  1. docker-compose.yml 을 통해 애플리케이션 컨테이너화를 합니다.
  2. 각 애플리케이션 컨테이너 경로의 dockerfile을 통해 설정을 합니다.

Docker 설치 방법 in Mac OS

1. Docker 공식 홈페이지로 이동합니다.

 

2. Mac OS 칩셋 선택

M1, M2, M3.. 계열을 구매한 사용자라면 'Apple Silicon' 을 선택하시고,

intel 계열을 구매한 사용자라면 'Intel chip'를 선택해주세요.

 

 

3. 다운로드 받은 Docker dmg 파일 실행 및 설치

 

 

4. Docker 실행 및 정상 설치 확인

 

 

 

도커를 윈도우 환경에서 설치하는 순서입니다.

 

1. 도커 설치를 위해 사용중인 PC의 가상화 옵션을 사용으로 바꿔주세요.

* 가상화 : 미사용일 경우 아래와 같이 사용으로 변경 해주세요

 [Windows 하이퍼바이저 플랫폼]과 [가상 머신 플랫폼] 항목을 체크 해주세요.

 

 

 

2. 도커 윈도우 다운로드 사이트에서 설치 파일을 다운로드 해주세요.

https://hub.docker.com/editions/community/docker-ce-desktop-windows/

 

Docker Desktop for Windows by Docker | Docker Hub

Docker Desktop for Windows Docker Desktop for Windows is Docker designed to run on Windows 10. It is a native Windows application that provides an easy-to-use development environment for building, shipping, and running dockerized apps. Docker Desktop for W

hub.docker.com

 

 

 

3. 다운로드된 설치 파일을 실행 해주세요.

 

 

 

4. 설치된 도커를 실행 해주세요

 

 

 

5. 도커 약관에 동의 해주세요

 

 

 

6. 튜토리얼이 필요하신 분은 'Start'버튼을 눌러 확인 해주시고, 아니신 분은 'Skip tutoral'을 눌러주세요.

 

 

 

7. 도커 설치가 완료됐습니다.

+ Recent posts