본문 바로가기
내일배움캠프

내일 배움 캠프 최종 프로젝트 - 스프링부트 서버를 컨테이너로 올리기 전 준비(도커 설치)

by Kiwimel0n 2024. 4. 11.

CD를 구상했을때 서버에 배포하는 방식을 jar파일로 빌드 후 도커파일 이미지로 만들어 도커허브에 레포지에 업로드 후에 vm에서 도커이미지를 받아 컨테이너를 올려서 서버에 스프링부트 앱이 동작하는 방식으로 구성을 하였다.

 

그리고 초기 아키텍처 구상에 따라 하나의 서버에 데이터를 저장할 RDBSM인 MySql과 캐싱 및 동시성제어를 위한 redis를 컨테이너를 docker compse가 아닌 개별적으로 구성을하여 관리 할 수 있도록 구상을하였다.

 

그러기 위해선 vm 인스턴스에 도커를 설치하여 컨테이너를 올릴 수 있는 환경을 만들어 주어야 한다.

도커를 설치 해주기 위해 ssh 접속을 통하여 인스턴스 접속 해준다.

 

윈도우 였다면 간편하게 도커 데스크톱을 통해 도커를간단하게 설치할 수 있지만, 이곳 서버는 linux cli 환경이므로 명령어를 통해 설치를 해주어야 한다.

 

도커를 설치하는 방법에는 여러가지가 있는데 이중 apt(advanced package tool)을 이용한 도커 설치 로 하겠다.

APT방식으로 도커를 설치하게 되면

공식 Ubuntu 리포지토리에서 Docker 패키지가 설치됩니다. 이 패키지는 Ubuntu 관리자가 관리하며 시스템의 패키지 업데이트 메커니즘을 통해 업데이트를 할 수 가 있다.

 

# docker engine gpg 키 등록
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# apt source 에 docker 관련 추가
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] 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

# docker engine 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin docker-compose

# docker 그룹에 현재 계정을 등록하여 sudo 없이 docker 명령을 사용하게 함
sudo usermod -aG docker user
sudo service docker restart

# 새로운 터미널을 열고 확인
docker version

 

마지막 docker version 명령어를 통해 정상적으로 도커가 설치된 것을 확인했다.

 

위의 코드 방식대로 도커를 설치만하고 도커를 사용하려고 보면 루트 권한 명령어를 추가하지 않고 도커를 사용시

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

이러한 권한 거부가 뜰 것이다 

이러한 문제를 해결하기 위해 꼭 도커를 사용할 유저를 docker 그룹에 등록을 시켜주길 바란다.

 

이제 도커가 설치 되었음으로 mysql과 redis를 설치를 해주겠다.

 

각각 container 생성 명령어를 입력하여 컨테이너를 올려준다.

 

Redis container

docker run --name redis-container -p 6379:6379 -d redis:latest

 

MySQL container

docker run --name mysql-container -p 3306:3306  -e MYSQL_ROOT_PASSWORD="루트 비밀번호" -d mysql:latest

 

이렇게 run 명령어를 통하여 컨테이너를 올리면 이미지가 없어도 도커 허브의 이미지를 받아와 컨테이너를 동작시킬 수 있다.

그리고

 

MySQL 컨테이너에 접속을 해준다.

docker exec -it mysql-container /bin/bash

##bash
mysql -u root -p

비밀번호 입력


##MySQL 접속하여 db를 생성시켜줌
create database DB이름;

 

비밀번호 입력 후 

웹서버가 사용 할 db를 생성해주면 서버에서 해줄 준비는끝이난다.

다음에는  코드작성 및 기능 개발할때는 로컬환경으로 localhost로 application.yml을 설정하면 됐지만 개발 서버 환경의 application.yml을 따로 설정 해주어야하기때문에 application.yml을 관리하는 법을 알아 보겠다.