Docker

운영 DB 교체 - Docker에 설치된 DB로 교체하는 방법

dev_SiWoo 2024. 1. 11. 13:40
 

 리눅스 서버에 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. 컨테이너 네트워크 설정

1. Docker 네트워크 생성: Docker 내부 네트워크를 생성하여 DB와 Spring 프로젝트가 서로 통신할 수 있도록 설정
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