Mariadb의 데이터 디렉토리를 초기화하고 시스템테이블이 없는 경우 생성하기 위해 mariadb_install_db을 사용할 수 있다. mysqld를 실행할 때 데이터 디렉토리에 접근할 계정으로 mariadb_install_db을 실행하거나 --user 옵션으로 사용자를 인자로 넘겨주어야 한다. 내 경우 --user와 --datadir 옵션으로 사용자와 데이터 디렉토리를 지정해 주었다.
mariadb-install-db --user=mysql --datadir=/var/lib/mysql
mysqld를 백그라운드에서 실행한다.
/usr/bin/mysqld_safe --user=mysql --datadir=/var/lib/mysql &
커맨드라인 뒤에 &을 붙여 백그라운드에서 데몬을 실행한다.
SQL이라는 데이터 쿼리언어로 데이터베이스 접근 권한 및 사용자 설정을 해야한다. 해당 링크에 자세한 내용을 확인할 수 있다.
GRANT ALL ON *.* TO 'root'@'%' identified by '$MYSQL_ROOT_PASSWORD' WITH GRANT OPTION ;
GRANT ALL ON *.*: 모든 데이터테이블(*.*)에 모든 권한을 부여한다는 의미
TO 'root'@'%' identified by '$MYSQL_ROOT_PASSWORD': TO '루트사용자'@'원격접속' identified by '비밀번호'
WITH GRANT OPTION: 이 사용자는 다른 사용자에게 해당 권한을 부여할 수 있음.
FLUSH PRIVILEGES; 설정을 적용한다.
나는 모든 쿼리를 파일(query.sql)에 저장한 뒤 mariadb < query.sql로 한번에 적용했다.
이제 백그라운드에 실행해두었던 mysqld를 종료하고 포그라운드에 다시 실행하면 된다. 실행옵션으로 --skip-networking=0와 --bind-address=0.0.0.0를 추가해주었다.
--skip-networking이 설정되어 있다면 로컬에서의 소켓접속만 허용한다. 우리는 원격으로 데이터베이스에 접근할 수 있어야 하므로 꺼주도록 하자.
--bind-address로 어떤 IP를 listen할지 설정할 수 있다. 0.0.0.0으로 설정해 모든 IP에서 접근 가능하도록 할 수 있다.
구축하고자 하는 서버에서 Mariadb는 Wordpress의 데이터를 저장하기 위해 존재한다. Wordpress 컨테이너와 Mariadb 컨테이너가 소통이 가능하게 하기 위해 docker-compose.yml에 network 설정을 해주자.
networks:
backend_network:
driver: bridge
name: backend_network
컨테이너 사이의 소통이 가능하게 하는 네트워크의 드라이버로 bridge를 이용한다.
backend_network라는 네트워크를 구성하여 Mariadb 컨테이너와 Wordpress 컨테이너의 네트워크에 추가해준다.
services:
mariadb:
...
networks:
- backend_network
...
wordpress:
...
networks:
- backend_network
...
volumes:
mariadb_volume:
name: mariadb_volume
driver_opts:
type: volume
device: /home/seunchoi/data/mariadb
o: bind
도커가 관리하는 볼륨에 컨테이너의 데이터를 저장할 수도 있지만 host에 저장하고 직접 접근해 관리할 수 있다. 이 방식을 바인드 마운트라고 한다.