운영 DB 교체 - Docker에 설치된 DB로 교체하는 방법
리눅스 서버에 Tomcat을 통해 운영 중인 프로젝트에서 사용하고 있는 데이터베이스(DB)를
Docker에 설치된 새로운 DB로 교체하고자 하는 경우, 다음과 같이 설정할 수 있다.
ubunutu를 기준으로 작성하였는데 만약 다른 리눅스 버전을 사용중이라면
https://docs.docker.com/engine/install을 참고하여 Docker를 설치하면 된다.
1. Docker 설치 및 설정
Docker 설치 (leatest version)
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# install leatest version docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker 서비스 시작
sudo service docker start
2. 새로운 DB 설치
1. DB 이미지 다운로드: Docker에서 사용할 DB 이미지를 다운로드
#Mysql
docker pull mysql
#MariaDB
docker pull mariadb
#PostgreSQL
docker pull postgres
2. DB 컨테이너 생성 및 실행: DB를 실행할 컨테이너를 생성하고 실행 ( 필요한 환경 변수를 설정이 필요함)
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql
3. 컨테이너 네트워크 설정
docker network create my-network
2. 컨테이너 네트워크 연결: 생성한 네트워크에 DB 컨테이너를 연결
docker network connect my-network mysql-container
4. 컨테이너 볼륨 설정
Docker 컨테이너의 볼륨을 설정하지 않으면 컨테이너가 삭제될 때 데이터베이스의 데이터도 함께 사라지게 된다.
따라서 데이터의 영속성을 확보하기 위해서는 볼륨(Volume)을 사용하여 데이터를 컨테이너 외부에 저장해야한다.
1. 볼륨생성
docker volume create mariadb-volume
2. 컨테이너 실행 시 생성한 볼륨 연결하여 실행
docker run --name mariadb-container -e MYSQL_ROOT_PASSWORD=yourpassword -v mariadb-volume:/var/lib/mysql -d mariadb
--name 옵션
: Docker에서 컨테이너 실행시 해당 컨테이너의 이름을 지정 (컨테이너를 식별하고 관리하는데 사용)
-v 옵션(-v 생성한볼륨명:DB가데이터를저장하는컨테이너내부경로)
: mariadb-volume 볼륨을 MariaDB 컨테이너 내부의 /var/lib/mysql 경로에 마운트한다는 의미
-e 옵션(-e 환경변수명:변수값)
: Docker 컨테이너를 실행할 때 환경변수를 설정하는데 사용되는 옵션으로
-e MYSQL_ROOT_PASSWORD=yourpassword는 컨테이너 내에서 MYSQL_ROOT_PASSWORD라는 환경 변수에 yourpassword값을 넣고 이 환경 변수값은 MariaDB가 초기화될 때 루트 사용자의 패스워드로 사용된다.
(DB별로 Docker이미지 문서를 참조하는 것을 추천하며 만약 컨테이너에 여러 환경변수를 사용하고자 한다면 -e 옵션을 여러번 사용하면됨)
(예시)
docker run --name some-container -e VAR1=value1 -e VAR2=value2 -d some-image