Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- /
- chatgpt #gpt #챗지피티 #ai
Archives
- Today
- Total
개발자 데뷔!
Docker배포2 - (Docker-Compose.yml 작성) 본문
도커 컴포즈 파일은,
서버 상에서 필요한 모든 도커 컨테이너를 실행시키는 명령어를 묶어서
한번에 실행시킬 수 있도록 만든, 스크립트 파일의 역할을 한다.
터미널 명령어를 어떻게 Docker Compose 파일로 정리할지 알아보자.
실행시켜야 할 도커 컨테이너는 아래 두개이다.
- 데이터베이스 (MySQL)
- 백엔드 (SpringBoot)
위 두 컨테이너를 실행시키기 위해, 나는 서버 터미널에서 아래 두 명령어를 실행하고, 잘 동작함을 확인했었다.
# DataBase 컨테이너 실행
docker run -d --name {실행할 이미지이름}:{태그버전} -e MYSQL_ROOT_PASSWORD={DB접속 비밀번호} -e MYSQL_DATABASE={DB명} -p 3306:3306 {실행될 컨테이너이름}:{태그버전}
# Backend 컨테이너 실행
sudo docker container run --detach --publish 80:8080 {도커허브id}/{실행할 이미지이름}:{태그버전}
(Database 세팅 옵션의 db명이나, 비밀번호는, 기존 로컬 백엔드에서 db설정했던 부분 ex_ application.properties 참고하여 작성하면 된다.)
컨테이너의 포트 연결은, {외부에서 접속할 포트}:{컨테이너 내부의 포트} 라고 생각해주면 된다.
위 명령어 두개를 docker-compose.yml 로 작성하면 아래와 같다.
파일명은 반드시. docker-compose.yml 을 유지해야하고,
docker-compose.yml 파일은 서버에 원하는 디렉토리를 만들어 위치시키면 된다. (나의 경우: ~ )
기본 틀은 공식 제공하는 파일을 사용하자... (정신건강에 이롭다)
version: "3"
services:
swipe-jeju-db:
image: mysql:latest
container_name: swipe-jeju-db
networks:
- {커스텀 네트워크 이름}
environment:
MYSQL_ROOT_HOST: "%"
MYSQL_ROOT_PASSWORD: {db접속 비밀번호}
MYSQL_DATABASE: {db명}
ports:
- "3306:3306"
command: ["--character-set-server=utf8mb4","--collation-server=utf8mb4_unicode_ci"]
swipe-jeju-back:
image: {도커허브id}/{실행할 이미지이름}:{태그버전}
container_name: swipe-jeju-back
networks:
- {커스텀 네트워크 이름}
restart: on-failure
ports:
- "80:8080"
environment:
DB_HOST: {db 도커컨테이너명}
DB_PORT: {db 도커컨테이너 실행포트}
SPRING_DATASOURCE_URL: jdbc:mysql://{db 도커컨테이너명}:{db 도커컨테이너 실행포트}/{db명}?useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: "{db 유저명}"
SPRING_DATASOURcE_PASSWORD: "{db접속 비밀번호}"
depends_on:
- {db 도커컨테이너명}
networks:
{커스텀 네트워크 이름}:
driver: bridge
- networks
- 커스텀 네트워크를 설정해, 두 컨테이너가 지정한 커스텀 네트워크에서 동작하도록 한다.
- 위처럼 {커스텀 네트워크 이름}을 지정해도, 실제 실행될 때는, root-{커스텀 네트워크 이름}등으로, 도커 기본 규칙에 따라 prefix가 붙어 실행된다.
- 도커 network의. default 값은 bridge이다.
- 백엔드 컨테이너에, 백엔드의. application.properties 에서 지정한 내용을 다시 써준다.
- 위같이 할 경우, application.properties의 내용보다도 docker-compose.yml 에 작성된 내용의 우선순위가 더 높아 우선 적용되고, appllication.properties의 내용은 무시된다.
- 도커에서 백엔드-db 연결에 에러가 나는 경우가 많으므로 위처럼 대놓고 명시해주는게 마음이 편하다... (로컬에서 잘 연결되던 서비스 연결이 안되서 트러블 슈팅에 꽤 걸렸다)
옵션 상세설명은 향후 포스팅으로 이어서 하겠다..
'DevOps > Docker' 카테고리의 다른 글
Docker 로그분석 - (도커 체인)트러블슈팅: 갑자기 잘되던 docker 연결이 안된다!! (0) | 2024.04.03 |
---|---|
Docker 배포1 (도커 이미지 생성 & 도커 허브 업로드) (0) | 2024.04.02 |
Docker 기본 명령어 - image/container/network (0) | 2024.04.02 |
[Docker] Docker 컨테이너 (1) | 2023.11.30 |
[Docker] Docker 이미지 (0) | 2023.11.30 |