ETC

테스트 환경을 위한 mariadb, kafka docker compose

알쓸개잡 2023. 9. 18.

로컬에서 테스트 환경 구성을 위한 mariadb, kafka docker compose다. docker 엔진이 설치되어 있어야 하며 macOS(arm64) 환경에서는 이상 없이 동작하는 것을 확인하였다. 로컬에 테스트를 위한 환경 구성이기 때문에 가장 기본적인 설정만으로 구성된다.

 

MariaDB docker compose

version: '3.1'

services:
  db:
    image: mariadb
    restart: always
    environment:
      MARIADB_ROOT_PASSWORD: <root 비밀번호 입력>
    ports:
      - 3306:3306

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

docker hub의 도커 공식 이미지를 설치한다. Linux, ARM 64, PowerPC 64LE, IBM Z 386, x86-64를 지원하며 자세한 사항은 mariadb docker hub에서 확인해 볼 수 있다.

 

adminer는 mariadb 콘솔 도구이며 필수로 설치해야 하는 것은 아니다. 로컬 서버로 동작하며 브라우저에서 localhost:8080으로 접속하면 root 인증 후 DB에 접속할 수 있다.

adminer 접속 화면
adminer를 통한 DB 접속 화면

 

kafka docker compose

version: "3.8"

services:
  zookeeper:
    image: docker.io/bitnami/zookeeper:3.8
    ports:
      - "2181:2181"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: docker.io/bitnami/kafka:3.4
    ports:
      - "9092:9092"
      - "9094:9094"
    environment:
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_ENABLE_KRAFT=no
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_CFG_LISTENERS=INTERNAL://kafka:9094,EXTERNAL://kafka:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka:9094,EXTERNAL://127.0.0.1:9092
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
    depends_on:
      - zookeeper

docker image는 docker hub의 bitnami에서 제공하는 kafka, zookeeper 이미지를 사용하였다. Linux, x86-64, ARM64를 지원하며 더 자세한 사항은 bitnami kafka docker hub에서 확인해 볼 수 있다.

위 docker compose에서는 data를 persistent 하게 보관하도록 설정하진 않았지만 데이터를 persistent 하게 보관하려면 아래 내용을 추가하면 된다.

kafka:
  ...
  volumes:
    - /path/to/kafka-persistence:/bitnami/kafka
  ...

/path/to/kafka-persistence는 kafka 컨테이너의 /bitnami/kafka 경로와 마운트 될 로컬 경로를 지정한다.

bitnami kafka 컨테이너는 루트로 동작하는 컨테이너가 아니기 때문에 마운트 된 파일과 디렉터리에 UID 1001에 대한 적절한 권한이 있어야 한다. 로컬 룹백 아이피 127.0.0.1로 접속을 하여 테스트해 보려는 경우 kafka 접속 포트는 9092로 지정하면 된다.

 

MySQL docker compose

version: '3.1'

services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: '<비밀번호>'
      MYSQL_USER: '<아이디>'
      MYSQL_PASSWORD: '<비밀번호>'
    ports:
      - "3306:3306"
    volumes:
      - data:/var/lib/mysql

volumes:
  data:

MySQL 8.0 버전을 설치한다. docker에 MySQL을 설치하면 root 계정과 <아이디>로 설정한 계정이 mysql DB의 user 테이블에 생성된다. docker compose 실행 후 아래 명령을 통해 root 계정으로 mysql 에 접속할 수 있다.

docker exec -it mysql-db-1 mysql -u root -p
>> 비밀번호 입력 후 접속

<아이디>로 설정한 계정의 경우 계정만 생성된 것이고 권한(privileges)은 생성되지 않은 상태이므로 <아이디> 계정으로 접속할 수 없다.

root 계정으로 접속 후 <아이디>@<호스트> 계정을 추가로 생성 후 권한을 부여한다.

CREATE USER '<아이디>'@'%' IDENTIFIED BY '<비밀번호>';
GRANT ALL PRIVILEGES ON '<아이디>'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
CREATE DATABASE IF NOT EXISTS <디비명>;

위 명령을 통해서 외부 아이피에서도 <아이디> 계정으로 접속할 수 있는 권한을 준다.

 

docker compose 실행

$>docker compose up -d

docker desktop 컨테이너 대시보드

댓글

💲 추천 글