docker - Mysql 컨테이너에 데이터전용(dataonly) 컨테이너 연결하기

들어가기

시스템을 운영하다보면 다양한 데이터(DB, 로그 ...)가 생성, 축적되며 이 데이터는 프로그램이 종료된 후에도 스토리지 등에 저장된다. 이를 영속 데이터라 하며 시스템 가동 시간에 따라 증감하고 변화한다. 스토리지 저장 공간은 한정되어 있고 장애로 인해 데이터가 소실될 수도 있으므로 이를 잘 관리하는 것은 중요하다.

데이터 전용 컨테이너(dataonly)란?

다양한 종류의 컨테이너를 동시에 여러개 서비스 할수 있는 도커에서도 위와 같은 영속적인 데이터를 관리할 필요가 있다.

Docker 기능으로는 데이터 전용 컨테이너에서 데이터를 관리하는 방법과 로컬호스트를 마운트하여 데이터를 저장하는 방법이 있다.

로컬호스트에 마운트하는 방법도 간단하고 좋은 방법이지만, 개인적으로 데이터 전용 컨테이너를 만들어 다양한 컨테이너에서 발생하는 데이터를 일관적으로 관리하는 방법이 좋아보인다. 데이터 전용 컨테이너란 말 그대로 데이터만 전문적으로 저장할 용도의 컨테이너를 말한다. 이번 글에서는 데이터 전용 컨테이너를 만들고 mysql 컨테이너를 연동시키는 방법을 정리해 보겠다.

데이터 전용 컨테이너 생성하기

먼저 데이터를 저장하는 데이터 저뇽 컨테이너를 생성하자. 데이터 전용 컨테이너는 데이터를 저장하는 역할만 가지며 다른 기능은 수행하지 않는다. 필요한 Linux 커맨드의 실행만을 확인하면 되므로 Docker Hub에 공개된 BusyBox 공식 이미지를 사용한다.

busybox란 표준 Linux 커맨드를 하나의 바이너리 파일에 저장한 애플리케이션이다. 가전제품, 네트워크 장비, 모바일 장치 등의 임베디드 기기에서 자주 사용되고 있다.

Dockerfile 작성하지 파일명은 dockfile 이고 확장자는 없다.

1
2
3
4
5
6
7
8
# 1.Docker 이미지 가져오기
FROM busybox

# 2.작성자 정보
MAINTAINER 0.1 your-name@your-domain.com

# 3.데이터 설정
VOLUME /var/lib/mysql

VOLUME으로 지정한 디렉터리는 다른 컨테이너가 마운트할 수 있는 불롬이 된다. MySQL 데이터를 저장해야 하므로 /var/lib/mysql 디렉터리로 지정한다.

다음 명령으로 dataonly 라는 이름의 데이터 전용 컨테이너 이미지를 생성하자. 아래 명령은 dockfile과 같은 경로에서 실행해야 한다.

1
docker build -t dataonly .

결과1

데이터 전용 컨테이너를 구동 시키자

1
docker run -it --name dataonly dataonly

결과2

일단 데이터 컨테이너는 중지시켰다. 참고로 중지된 상태에서도 데이터는 마운트가 된다.

Mysql 컨테이너 생성하기

Mysql 컨테이너는 docker-compose을 이용하여 생성하겠다. 원하는 경로에 docker-compose.xml 파일을 생성하고 아래 내용을 입력했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#DB 서버 설정
dbserver:
#이미지 지정
image: mysql

#포트지정
ports:
- "3306:3306"

#데이터 저장 장소 지정
volumes_from:
- dataonly

#환경변수 지정
environment:
MYSQL_ROOT_PASSWORD: password

volumes_from에서 앞서 생성한 데이터 컨테이너를 마운트 설정한다.

아래 명령을 입력하여, 백그라운드로 mysql 컨테이너를 구동하자. 아래 명령은 docker-compose.yml 파일과 같은 경로에서 실행해야 한다.

1
docker-compose up -d

이미지가 없어서 새로 다운받고 자동으로 컨테이너를 실행하는 것을 확인 할 수 있다.

결과3

데이터 컨테이너 시동 및 mysql 마운트 확인

아래 명령으로 데이터 컨테이너를 동작시키고, mysql컨테이너가 마운트 된 위치를 열어보자.

1
docker start -ia dataonly

결과4

위 화면을 보면 /var/lib/mysql 디렉터리가 마운트 된 것을 확인할수 있다.

아래 화면에서 mysql 컨테이너에 접속하여 mysql 서버의 동작도 확인했다.

결과5