본문 바로가기
Kotlin Spring/Kotlin Spring 강의 내용

[부록] Docker for Mysql, Redis, Kafka

by Bill Lab 2026. 1. 26.
728x90

1. Docker 란?

    : VM(Viture Machine)의 경량화 버전으로, 응용프로그램실행에 꼭 필요한 경량화된 OS 및 서버를 설치하여 컨테이너 기반으로 

      실행, 관리하는 오픈 소스(하나의 격리된 작은 PC 개념)

    (추가설명 링크: https://www.ibm.com/kr-ko/topics/docker )

 

 

2. Docker 설치

     1) 다운로드 : https://www.docker.com/

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

        : 위의 경로에서 설치를 바로 해도 된다.(OS 버전에 맞는걸 선택하자!, Window 의 경우 별도의 WSL 작업이 필요하다)

 

   2) 설치 확인

        : docker --version 명령어로 아래와 같이 버전확인이 가능하다.

        (Docker Dashboard 에서도 확인 가능)

        

 

3. Docker 를 사용하므로써 장점

     - 하나의 물리서버에 여러개의 서버생성 가능

     - 꼭 필요한 파일만을 설치하여 서버화 가능

     - 컨테이너 간의 영향 및 외부프로그램의 영향을 제거하여, dev stage prod 환경을 동일하게 구성가능

        (과거, 타 응용프로그램의 영향으로 인해, 코드에 문제가 없음에도 불구하고 오류가 나는경우 발생)       

 

4. Mysql  Dockerfile

FROM mysql

ENV MYSQL_USER=admin
ENV MYSQL_PASSWORD=1234
ENV MYSQL_ROOT_PASSWORD=1234
ENV MYSQL_DATABASE=commerce

CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]

 

docker build -t mysql .

docker run -d -p 3306:3306 --name mysql-container mysql

위의 dockerfile 을 직접 실행 or docker image 를 실행할때 위의 ENV 정보를 넣어주면 된다.

 

 

5. Docker Compose 로 작성

 version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: kotlin-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: commerce
      MYSQL_USER: basic
      MYSQL_PASSWORD: basic1234
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

  redis:
    image: redis:7.4-alpine
    container_name: kotlin-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    command: redis-server --appendonly yes

  zookeeper:
    image: confluentinc/cp-zookeeper:7.7.0
    container_name: kotlin-zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - "2181:2181"

  kafka:
    image: confluentinc/cp-kafka:7.7.0
    container_name: kotlin-kafka
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    volumes:
      - kafka-data:/var/lib/kafka/data

volumes:
  mysql-data:
  redis-data:
  kafka-data:

 

실행명령어!

docker-compose up -d

 

6. 기타 명령어(정리용)

#현재 상태 파악
docker system df

#빌드캐시지우기
docker builder prune

#강제로캐시까지지우기
docker builder prune --all

#빌드이미지지우기
docker image prune -a

#사용하지않는볼륨삭제
docker volume prune

#사용하지 않는 컨테이너 제거
docker container prune
728x90