https://velog.io/@mooh2jj/docker-compose로-SprongBoot-JPA-MySql-DB-서버만들기
.env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=1234
MYSQL_DATABASE=docker
SPRING_DATASOURCE_USERNAME=root
전에 한 docker-compose 파일에 더해서 nginx 컨테이너를 추가해봤습니다.
docker-compose.v2.yml(nginx 추가)
version: '3.8'
services:
web:
container_name: nginx
image: nginx
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- application
networks:
- test_network
database:
container_name: mysql_db
image: mysql:8.0.22
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 1234
TZ: Asia/Seoul
ports:
- "3306:3306"
volumes:
- /mysql/conf.d:/etc/mysql/conf.d
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # init.sql을 컨테이너 내부의 초기화 디렉토리로 복사
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- test_network
application:
container_name: docker-test-spring
restart: on-failure
build:
context: ./
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql_db:3306/${MYSQL_DATABASE}?useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME}
SPRING_DATASOURCE_PASSWORD: ${MYSQL_ROOT_PASSWORD}
depends_on:
- database
networks:
- test_network
networks:
test_network:
web:
container_name: nginx
image: nginx
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- application
networks:
- test_network
volumes으로 nginx/conf.d 디렉토리
를 마운트하였습니다. nginx가 실행될 때 외부에서 이 경로로 서칭을 할 수 있게 된 겁니다.
nginx/conf.d/app.conf
docker-compose를 실행하기 전 app.conf
을 만들어주어야 합니다. 이름은 상관없습니다.
server {
listen 80;
access_log off;
location / {
proxy_pass http://application:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
이제 docer-compose에 등록된 application
들은 Nginx 80포트를 통해서 확인할 수 있게 되었습니다. url에서 확인해보면 됩니다.
get : {nginx ip}/blog
부러우저 확인(로컬)