본문 바로가기
Server

[CentOS]MariaDB 도커 라이즈 간단한 방법

by DuncanKim 2022. 9. 26.
728x90

[CentOS] MariaDB 도커 라이즈 간단한 방법

 

도커 학습을 하고, 간단히 정리해본 것이다.

 

hostOS(CentOS) 안에 있는 도커에 세 가지를 넣는다. mysql, spring boot, nginx를 설치할 것이다.

만약 site3.com 이라는 요청이 들어오면, nginx가 sb로 토스를 해주고, 스프링 부트와 mysql을 host os 어딘가에 있는 포트를 경유해서 접근할 수 있도록 하는 방법을 학습해본다.

 

이 과정은 도커가 먼저 hostOS에 설치되어 있어야 한다.

 

 

1. 현재 서비스 삭제

 

OS 내부에 있는 DB 충돌을 없애기 위해 mariadb를 재설치한다.

sudo yum remove mariadb
sudo rm -rf /var/lib/mysql  : 잔존 데이터 삭제
sudo rm -rf /etc/my.cnf.d* : 잔존 설정파일 삭제

 

2. MariaDB 최신 이미지 실행

 

# 컨테이너 실행

docker run \
  --name mariadb_1 \
  -d \
  --restart unless-stopped \
  -e MARIADB_ROOT_PASSWORD=(비밀번호설정) \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /docker_projects/mariadb_1/conf.d:/etc/mysql/conf.d \
  -v /docker_projects/mariadb_1/mysql:/var/lib/mysql \
  -v /docker_projects/mariadb_1/run/mysqld:/run/mysqld/ \
  mariadb:latest

도커 컨테이너를 실행해서 mariadb를 설치한다.

비밀번호 설정이라고 되어 있는 부분에 사용할 비밀번호를 입력한다.

 

 

3. 설치된 mariadb 보안설정, 계정 생성, DB 생성

 

1) 보안설정

 

docker exec -it mariadb_1 /usr/bin/mariadb-secure-installation

(실행후)
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
나머지 Y

 

 

2) 마스터계정 생성 및 DB 생성

 

(마스터계정 생성)

docker exec -it mariadb_1 mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO (마스터계정)@'%' IDENTIFIED BY ‘(비밀번호 설정)';
GRANT ALL PRIVILEGES ON *.* TO (마스터계정)local@127.0.0.1 IDENTIFIED BY ‘1234';
GRANT ALL PRIVILEGES ON *.* TO (마스터계정)local@'172.17.%.%' IDENTIFIED BY '1234';


(DB 생성)

CREATE DATABASE (DB명)__test;
CREATE DATABASE (DB명);
USE (DB명);


(아티클 테이블 생성, id pk설정)

CREATE TABLE `article` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `subject` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);


(테스트 값 입력)

insert  into `article`(`id`,`subject`) values 
(1,’제목1’),
(2,’제목2’);


(종료)
exit

 

 

3) 빌드 후 확인

 

(1) 빌드

 

./gradlew clean build

 

clean build 사용 시 Execution failed for task ':test'

오류 해결하려면, gradlew —debug build 명령을 사용해서 빌드를 하는 방법도 있다.

 

 

(2) 크롬에서 확인

 

: http://(각자의 hostOS 서버 IP):8080/article/getList

 

(안되면 현재 docker ps -a를 확인해서 돌아갔던 컨테이너가 있는지 확인하고, rm 시켜준다.) 

 

 

 

 

 

4. nginx proxy manager

 

배포를 하려면 무조건 써야 한다. nginx를 직접 설치해서 해도 되지만, https 연결에 비용을 내야 하는 등의 문제가 있다. proxy manager를 쓰면 무료이며 ssl 비용이 없다. let’s encrypt는 인증서를 자동 갱신해준다.

 

nginx proxy manager는 nginx 설치, 관리, ssl까지 한방에 된다. 자동갱신도 된다. 이러한 proxy manager를 도커 속에 설치하는 것이다.

 

1) host 파일 수정 

 

경로 : \etc\hosts(mac 기준)

 

(linux 서버 ip) site1.com
(linux 서버 ip) site2.com
(linux 서버 ip) site3.com
(linux 서버 ip) site4.com
(linux 서버 ip) site5.com
(linux 서버 ip) site6.com
(linux 서버 ip) site7.com
(linux 서버 ip) site8.com

(linux 서버 ip) java.site1.com
(linux 서버 ip) java.site2.com
(linux 서버 ip) java.site3.com
(linux 서버 ip) java.site4.com
(linux 서버 ip) java.site5.com
(linux 서버 ip) java.site6.com
(linux 서버 ip) java.site7.com
(linux 서버 ip) java.site8.com

서버 부분에 이것을 추가해준다.

 

 

2) 디렉토리 생성

 

(새로운 폴더 생성, 이동)
mkdir -p /docker_projects/nginx_2
cd /docker_projects/nginx_2

(docker-compose.yml 생성)
vim docker-compose.yml

 

Dockerfile => 도커 기본 파일

yml => 도커 컴포즈를 활용할 수 있음.

 

 

3) docker-compose.yml 내용

 

version: "3"
services:
  app:
    image: ‘jc21/nginx-proxy-manager:latest' #다운로드 받을 이미지
    restart: unless-stopped # stop하기 전까지 계속 돌릴 것이다.
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      TZ: "Asia/Seoul"
      DB_MYSQL_HOST: "172.17.0.1"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "(마스터계정)local"
      DB_MYSQL_PASSWORD: "1234"
      DB_MYSQL_NAME: "nginx"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

(마스터계정)은 여러분의 계정으로 적어야 한다.

 

 

4) DB 생성

docker exec -it mariadb_1 mysql -u root -p(비밀번호)
CREATE DATABASE nginx;
exit

 

5) 실행

 

docker compose up -d

 

 

6) 관리 콘솔 접속

 

http://192.168.64.101:81

크롬에서 확인

 

7) 임시 관리자 계정

 

admin@example.com

changeme

 

 

8) 관리 콘솔 접속 후 관리자 계정 정보 변경

 

이메일, 비밀번호 변경

: 본인이 사용하는 이메일, 비밀번호로 변경

 

 

 

 

5. http://java.site2.com/ 호스트 추가, http://172.17.0.1:8080으로 포워드 하기

 

 

1) 관리 콘솔 접속

 

http://(리눅스 서버 ip):81

로그인

 

 

2) 호스트 추가

 

Hosts 버튼 클릭(상단 메뉴)

Add Proxy Host 버튼 클릭

Domain Names : java.site2.com

Forward Hostname / IP : 172.17.0.1

Forward Port : 8080

Save

 

 

3) 접속

http://java.site2.com

 

크롬에서 확인해보기

 

 

6. 소스코드 업데이트로 인한 재배포 방법

 

 

1) 프로젝트 폴더로 이동

cd /docker_projects/sbdb_1/project

 

 

2) 소스코드 최신화

git pull origin master

 

 

3) 빌드

./gradlew clean build

 

 

4) 기존 컨테이너 끄고 삭제

docker kill sbdb_1
docker rm sbdb_1

 

 

5) 기존 이미지 제거

docker rmi sbdb

 

 

6) sbdb 이미지를 다시 생성

docker build -t sbdb .

 

 

7) sbdb 이미지를 다시 실행

docker run \
  --name=sbdb_1 \
  -p 8080:8080 \
  -d \
  sbdb

 

 

8) 크롬에서 확인

http://java.site2.com

 

 

cf. git private 저장소인 경우, clone을 하지 못한다.
그럴 경우, ubuntu or centos git login을 해서 진행을 할 수 있다.

 

 

 

7. Dockerfile을 git에 추가

 

도커 파일은 깃에 넣어주는 것이 좋다. git remote -v를 해서 나온 곳에 들어가서 add file을 통해서 dockerfile을 그냥 만들어서 집어넣는다.

 

그런데 매번 귀찮을 수 있다. 버전이 바뀌면 바꿔줘야 하고… 그렇기 때문에, 그래들 안에서 해결할 수 있는 것이 있다.

 

./gradlew bootBuildImage를 하면 된다.

 

빌드가 아니라, 도커 이미지를 빌드하는 것이다. 이미지도 만들고, 프로젝트 빌드도 자동으로 된다. 참고로 이것은 테스트를 제외하고 빌드를 실행한다.

 

 

8. 그래들 빌드, Dockerfile 생성, 도커 이미지 생성을 대신해주는 한방 명령어./gradlew bootBuildImage

 

1) gradlew를 이용해서 소스코드 빌드, 이미지 빌드 한 번에 처리

./gradlew bootBuildImage

(이때 수행되는 소스코드 빌드에서는 테스트가 스킵된다.)

 

 

2) 만들어진 이미지는 이름이 앱이름:앱버전 의 형태

ex: app20220916:0.0.1-SNAPSHOT

(앱버전은 build.gralde 에 적혀 있다.)

 

 

3) 만들어진 이미지 실행

docker run \
  --name=sbdb_1 \
  -p 8080:8080 \
  -v /docker_projects/sbdb_1/volumes/gen:/gen \
  --restart unless-stopped \
  -e TZ=Asia/Seoul \
  -e "SPRING_PROFILES_ACTIVE=prod" \
  -d \
  app20220916:0.0.1-SNAPSHOT

## (SPRING_PROFILES_ACTIVE 환경변수를 꼭 추가해줘야 운영모드로 실행)
728x90

댓글