docker로 Laravel 개발 환경 구축 3편 (MariaDB 컨테이너 생성)

포스트 썸네일 이미지

도커docker를 이용해서 라라벨Laravel 개발 환경을 구축하는 방법을 연재하는 중이다.

지난 포스트에서는 php 컨테이너와 NGiNX 컨테이너를 생성했고, 오늘은 마지막 컨테이너인 MariaDB 컨테이너를 생성해 보겠다.




이전 포스트




MariaDB 로고




docker-compose.yml 파일 수정 (코드 추가)


docker-compose.yml

version: '3.8'

services:
  # php Service
  app:
    #생략
    environment: #여기를 추가한다.
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=${DB_NAME}
      - DB_USERNAME=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}

  # NGiNX Service
  web:
    #생략

  # MariaDB Service
  db:
    build: #이전에 다룬 내용이므로 설명 생략
      context: .
      dockerfile: ./docker/mariadb/Dockerfile
    ports: #이전에 다룬 내용이므로 설명 생략
      - ${DB_PORT}:3306
    environment: #환경 변수 설정.
      #환경 변수를 .env 파일에 써서 중요한 정보가 공개되지 않도록 한다.
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      TZ: 'Asia/Seoul'
    volumes: #app과 web에는 호스트측 디렉터리를 쓰고 있던 곳에 db-data라고 썼다.
      - ./db-data:/var/lib/mysql #호스트 시스템의 db-data라는 볼륨을 컨테이너와 연결하고 있다.


가장 하단에 추가된 volumes는 컨테이너를 삭제해도 데이터를 영구적으로 저장할 수 있도록 컨테이너 외부에 제공된 데이터의 저장 영역이다.

docker의 관리하에 호스트에 스토리지 공간을 확보하고 있다.


volumes가 필요한 이유는 컨테이너가 부팅되어 있는 동안 DB 레코드는 저장된 상태가 계속되지만, docker-compose down이나 docker-compose up -d 같은 명령으로 컨테이너를 새로 만들면 데이터베이스의 정보는 0으로 돌아가게 된다.

보통 DB에 있는 정보들은 절대 삭제되어서는 안 되기 때문에 '컨테이너를 파기해도 데이터를 남기고 싶다..'라고 할 때 volumes를 사용해 데이터를 영속화시킨다.


이 방식은 개발 환경에서는 자주 쓰이나, 프로덕션 환경에서는 도커가 관리하는 named volume을 더 권장한다.

이에 대한 내용은 기회가 되면 추후에 포스팅하거나 내용을 추가하겠다.




그래서 추가했다.

Named Volume을 사용하려면 링크한 포스트를 확인하자.





.env 파일 수정 (코드 추가)


docker-compose.yml 파일에 환경 변수가 추가되었으니 .env 파일에서 다음을 추가하자.


.env

WEB_PORT=
DB_PORT= #넣고 싶은 포트 번호를 넣는다. 보통은 3306

DB_NAME=
DB_USER=
DB_PASSWORD=
DB_ROOT_PASSWORD= #보안을 위해 상단의 User 패스워드와 다른 패스워드를 사용하자.

빈 곳 없이 신중하게 생각해서 값들을 넣어두자.




MariaDB의 Dockerfile 생성


cd docker/ && mkdir mariadb && cd mariadb/ && touch Dockerfile my.cnf && cd ../..

mariadb의 디렉터리와 파일들을 명령어 한 줄로 뚝딱 만들고 싶다면 ubuntu에 이 명령어를 입력하자.




Dockerfile

FROM mariadb:11.7.2

COPY ./docker/mariadb/my.cnf /etc/my.cnf

mariadb 디렉터리 안에 생성된 Dockerfile 안에 이렇게 코드를 넣고 저장하자.





my.cnf 파일 생성


my.cnf

[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci

# timezone
default-time-zone = SYSTEM

# Error Log
log-error = mysql-error.log

# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0

# General Log
general_log = 1
general_log_file = mysql-general.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

그리고 같은 디렉터리 안의 my.cnf 파일도 이렇게 저장한다.

코드의 작성은 이것으로 끝이다.




MariaDB 컨테이너를 생성하자


MariaDB 컨테이너도 생성할 준비가 되었다.

다음의 명령어들을 실행하자.


docker-compose up -d --build

ubuntu로 docker-compose.yml 파일이 있는 디렉터리에서 이 명령어를 실행한다.


docker-compose ps

이 명령어를 사용하여 실행 중인 컨테이너를 확인해 보자.

app과 web과 db 컨테이너가 실행 중인 것이 보인다면 성공.




docker-compose exec db mariadb --version

설치된 MariaDB의 버전을 확인한다.

(버전에 따라서 MariaDB이지만 버전을 확인하는 명령어에는 mysql을 입력해야 하는 경우도 있다.)




docker-compose exec db bash #db 컨테이너 안으로 들어가자.
mariadb -u root -p #root 혹은 설정한 user명을 넣고 패스워드를 입력한다.
show databases; #만들어진 데이터베이스(스키마)들을 확인한다.
use 스키마이름; #생성했던 데이터베이스에 들어간다.
show tables; #만들어진 테이블들을 확인한다. 아직은 아무것도 없는 것이 정상이다.
exit #컨테이너 밖으로 나오자. 아마 2번 입력해야 할 거다.

이어서 ubuntu에서 이 명령어들을 하나씩 실행해서 모든 것이 잘 설치되었는지 확인해 보자.





.gitignore 파일 수정


마지막으로 중요한 것!

이 시점에 db-data 디렉터리가 생성되어 있을 것이다. (Named Volume을 사용했다면 생기지 않는다.)

데이터베이스의 백업이나 데이터 저장을 위한 디렉터리는 보안상 주의해야 하기 때문에 이 디렉터리도 GitHub에 올라가지 않도록 .gitignore 파일을 수정하자.


.gitignore

/db-data
.env

이렇게 /db-data를 추가하고 저장한다.




다음 포스트

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

댓글 쓰기

0 Comments

문의하기 양식