
이야기를 이어서 해보자면, Main Server에 Database를 두는 것은 생각보다 어느정도 까다롭다고 생각한다. 따라서 RDS용 Docker를 분리하려고한다.
PostgreSql이 들어있는 image를 hub에서 pull해오자
필자는 참고로 postgresql 14.3version을 가져왔다.
또한 java-spring과 함께 사용할 nginx가 담겨있는 image를 가져오자
필자는 nginx stable version을 pull 해왔다.
java-spring이 담긴 container와 postgresql이 담긴 container와 통신을 해야한다.
그렇다면 docker network를 생성해줘야한다.
docker network create main-db
를 진행해주면 main-db라는 bridge driver network가 생기게 된다.
network 목록과 driver를 확인하는 방법은 다음과 같다.
docker network ls
이후 우리가 생성할때 해당 network를 연결해주자.
우선 postgreSQL Container를 올려보자
docker run -p 5432:5432 --network main-db -v ~/workspace/RDS/pgdata:/var/lib/postgresql/data --name rds-pg -e POSTGRES_PASSWORD=password -d postgres:14.3
-v 옵션은 Container와 공유해서 사용할 수 있는 공간이다.
-network 옵션은 network를 연결해주는 옵션이다.
이후 해당 postgresql container로 들어가자
docker exec -it rds-pg /bin/bash
이후 postgresql에 접속하자.
psql -U postgres

이후 SUPERUSER와 DATABASE를 하나 만들자.
postgres=# CREATE USER developerchans PASSWORD '1a2b3c4d' SUPERUSER;
postgres=# CREATE DATABASE testdb OWNER developerchans;
이후 developerchans로 testdb에 접속하자.
postgres=# \c testdb developerchans
다음으론 TABLE과 초기 임시 데이터를 넣어주자
testdb=# CREATE TABLE member (
id integer NOT NULL,
name character varying(255),
class character varying(32),
CONSTRANT member_pk PRIMARY KEY (id)
);
testdb=# INSERT INTO member VALUES(0,'test0','test0');
testdb=# INSERT INTO member VALUES(1,'test1','test1');
testdb=# INSERT INTO member VALUES(2,'test2','test2');
이러면 데이터베이스를 테스트 해볼 환경을 만들었다.
다음으론 nginx Container를 올리고 bash로 접속하자
sudo docker run -it -v ~/workspace/main/workspace:/home/code --name main-server -p 8080:80 --network main-db nginx:stable /bin/bash
apt update
apt upgrade
apt install -y gcc g++ make systemctl openjdk-11-jdk
apt update
우선 docker에는 sudo 자체도 깔려있지 않기 때문에 위와 같이 기본적인 것들을 깔아줘야한다. gcc와 g++과 make는 필요없나...? 잘모르지만(아모르파티)
이후 공유폴더에 jar파일을 실행시킨다.
java -jar demo-0.0.1-SNAPSHOT.jar
물론 Spring 프로젝트는 내가 임의로 만들어 놓은 프로젝트이당
Java와 PostgreSQL 연동법은 따로 업로드하겠다.
우선 여기서 중요한 것은 container간 통신은 ip로 한다. 따라서 환경변수 설정 파일인 application.properties 에서
해당 container 사설 ip 를 localhost 대신 입력해줘야한다.
ip 확인 방법은 container 외부에서
docker inspect {docker-container-name}
해주면 아래쪽에 ip address 라고 있다. 해당 ip를 참고하자.
마지막으로 테스트해본 결과 잘 통신이 된 것을 확인 할 수 있었다.
