728x90
aws로 test를 해보겠다.
aws 가입과 console 설정은 생략한다.
aws-linux2에서 git, jdk, docker install를 한다.
# ec2 업데이트
sudo yum update -y
# git 설치하기
sudo yum install git
# aws coreetto 다운로드
sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm
# jdk11 설치
sudo yum localinstall jdk11.rpm -y
# jdk version 선택
sudo /usr/sbin/alternatives --config java
# java 버전 확인
java --version
# 다운받은 설치키트 제거
rm -rf jdk11.rpm
설치 후 확인
java --version
spring boot application에 Dockerfile을 만든다.
project의 가장 상위에 만든다.
FROM nginx
# nginx에서 8080 port를 80 port에 포워딩하기 위한 설정
ADD ./default.conf /etc/nginx/conf.d/default.conf
application-docker.yml
spring:
datasource:
url: jdbc:mariadb://hyeogju_db/hyeogju_schema?serverTimezone=Asia/Seoul&useSSL=false&characterEncoding=utf8
env 파일 추가
# 어플리케이션 이름
export APP=hyeogju
# 스프링부트에서 사용하는 포트
# .yml 의 server.port 정보와 동일
export SPRINGBOOT_PORT=8080
# DB_RUN.sh 에서 사용 되는 DB 기본 정보
# .yml 의 spring.database 정보와 동일
export MARIADB_DATABASE=${APP}_schema
export MARIADB_USER=아이디
export MARIADB_PASSWORD=비밀번호
export DOCKER_DB_PORT=3306
export MARIADB_ROOT_PASSWORD=비밀번호
# DB_RUN.sh 에서 DB schema 정보 저장 위치
# 컨테이너가 삭제되더라도 데이터를 유지할 수 있는 효과
export LOCAL_DB_PATH=/build/DB/mariadb
#export LOCAL_DB_PATH=/Users/seungchulpark/APP/db/mysql
# APP_RUN.sh 에서 springboot 적용 profile 정의
# 다수개를 사용할 경우 docker, ssh 와 같은 방식으로 사용
SPRING_PROFILES_ACTIVE=docker
# WEB_RUN.sh 에서 외부에서 접근하는 포트를 정의
DOCKER_WEB_PORT=80
########## ########## ##########
# 어플리케이션 이미지 이름
export APP_IMAGE=${APP}_app_image
# 웹서버 이미지 이름
export WEB_IMAGE=${APP}_web_image
# 도커에서 불리는 어플리케이션 이름
DOCKER_APP=${APP}
# 도커에서 불리는 디비 이름
export DOCKER_DB=${APP}_db
# 도커에서 불리는 웹서버 이름
export DOCKER_WEB=${APP}_web
# network between nginx and springboot and db
export APP_NETWORK=${APP}_net
# name of springboot in docker
export DOCKER_WAS=${APP}
docker_wetwork.sh
. ./000_SET_ENV
docker network create ${APP_NETWORK}
db_run.sh
. ./000_SET_ENV
docker run -d --name ${DOCKER_DB} \
--network ${APP_NETWORK} \
-e MARIADB_DATABASE=${MARIADB_DATABASE} \
-e MARIADB_USER=${MARIADB_USER} \
-e MARIADB_PASSWORD=${MARIADB_PASSWORD} \
-e MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD} \
-v ${LOCAL_DB_PATH}:/var/lib/mariadb \
mariadb
echo "===================="
echo "db schema script"
echo "docker exec -it " ${DOCKER_DB} " bash"
echo "grant all privileges on "${MARIADB_DATABASE}.* to" '아이디'@'%';"
echo "grant all privileges on "${MARIADB_DATABASE}.* to" '아이디'@'localhost';"
echo "flush privileges;"
echo "===================="
app_build.sh
. ./000_SET_ENV
cd ..
./gradlew -x test build
app_image.sh
. ./000_SET_ENV
cd ..
docker build -t ${APP_IMAGE} --build-arg SPRINGBOOT_PORT=${SPRINGBOOT_PORT} .
web_config.sh
. ./000_SET_ENV
echo "nginx 파일 생성"
envsubst < default-template.conf | sed -e 's/§/$/g' > default.conf
web_image.sh
. ./000_SET_ENV
docker build -t ${WEB_IMAGE} .
default.cont
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://hyeogju_net:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
docker 설치
sudo yum install docker
# 잘 설치가 되었는지 확인
sudo docker --version
docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose.yml
version: '3.7'
services:
web:
image: hyeogju_web_image
networks:
- hyeogju_net
ports:
- "80:80"
links:
- was:hyeogju
restart: always # 종료될 시 재시작
entrypoint:
- "nginx"
- "-g"
- "daemon off;"
depends_on: # nginx가 실행 되기전에 was가 컨테이너로 올라와야 함
- was
was:
image: hyeogju_app_image
networks:
- hyeogju_net
restart: always # 종료될 시 재시작
environment:
- SPRING_PROFILES_ACTIVE=docker # application-docker.yml을 사용하기 위한 프로파일
links:
- db:hyeogju_db
entrypoint:
- "java"
- "-jar"
- "-Duser.timezone=Asia/Seoul"
- "/app.jar"
depends_on:
- db # was가 실행 되기전에 db가 컨테이너로 올라와야 함
db:
image: mariadb
networks:
- hyeogju_net
restart: always
environment:
- MARIADB_DATABASE=hyeogju_schema
- MARIADB_USER=아이디
- MARIADB_PASSWORD=비밀번호
- MARIADB_ROOT_PASSWORD=비밀번호
#volumes:
# - /build/DB/mariadb:/var/lib/mariadb
ports:
- "3306:3306"
networks:
hyeogju_net:
start.sh
./docker_wetwork.sh
./db_run.sh
./app_build.sh
./web_image.sh
./web_config.sh
./web_image.sh
프로젝트 설정
# gradlew의 권한 변경
sudo chmod + ./gradlew
# 빌드
./gradlew build
docker 실행
sudo systemctl start docker
docker 동작 확인
systemctl status docker
docker application 실행
./start.sh
docker-compose up --build -d
docker log 확인
docker logs -f
git hub
728x90