동아리 지원사이트를 만들면서 서버 배포를 한 과정을 적은 글입니다.
이번에는 docker image를 풀 받아서 ubuntu에서 사용하는 과정을 작성해보도록 하겠습니다.
이 글과 이어지는 내용입니다!
아래와 같은 순서로 개발을 진행하였습니다.
먼저 우분투에 접속을 해줍니다.

그 후 우분투 서버에 Docker를 설치를 합니다.
sudo apt update
sudo apt install docker.io
그 후 저번 시간에 도커허브에 올린 이미지들을 우분투 서버로 pull 받습니다.
docker pull mic050r/mysql:latest
docker pull mic050r/2024-msg-server:1.1
pull 받은 Docker 이미지를 이용하여 컨테이너를 실행합니다.
# MySQL 컨테이너 실행
docker run -d --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=dbname -e MYSQL_USER=username -e MYSQL_PASSWORD=password mic050r/mysql:latest
# Spring Boot 애플리케이션 컨테이너 실행
docker run -d --name msg-server-container mic050r/2024-msg-server:1.1
각 컨테이너는 백그라운드에서 실행되며, --name 옵션을 사용하여 각 컨테이너에 고유한 이름을 부여했습니다.
컨테이너가 정상적으로 실행되는지 확인하려면 아래 명령어를 사용합니다.
docker ps
실행 중인 컨테이너 목록이 표시됩니다.
실행 중인 컨테이너를 보면 mysql은 나오는데 spring 컨테이너는 보이지 않았습니다.
docker logs 컨테이너 아이디
왜 안나오는지 로그를 통해 확인 해보았더니 db 연결 에러가 난 것을 확인 하였습니다.
db 연결 에러가 난 이유는 현재 ubuntu에서 실행중인 mysql은 ubuntu ip를 사용해서 실행되고 있는데 저번에 작성한 application.yml에서는 jdbc url을 local에 있는 mysql로 연결을 해놓았기 때문입니다.
따라서 application.yml 코드를 수정 후 다시 도커허브에 올리도록 하겠습니다.
spring:
datasource:
url: jdbc:mysql://ubuntu_ip주소:3306/dbname
username: username
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
server:
port: 8081
address: 0.0.0.0
your:
api:
endpoints:
- /question
- /support-form
Datasource 설정
spring:
datasource:
url: jdbc:mysql://ubuntu_ip주소:3306/dbname
username: username
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
datasource: 데이터베이스 연결 설정을 담고 있는 부분입니다.url: MySQL 데이터베이스에 연결하기 위한 JDBC URL입니다.username 및 password: 데이터베이스에 연결할 때 사용되는 사용자 이름과 비밀번호입니다.driver-class-name: 사용할 JDBC 드라이버의 클래스명입니다.JPA 설정:
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
jpa: Java Persistence API(JPA) 설정 부분입니다.hibernate.ddl-auto: Hibernate가 데이터베이스 테이블을 자동으로 생성 또는 업데이트하는 방식을 지정합니다. 여기서는 업데이트를 선택했습니다.show-sql: Hibernate가 생성하는 SQL 쿼리를 콘솔에 출력할지 여부를 지정합니다.properties.hibernate.dialect: 사용할 Hibernate 방언(Dialect)을 지정합니다. 여기서는 MySQL용 방언을 선택했습니다.서버 설정:
spring:
server:
port: 8081
address: 0.0.0.0
server: Spring Boot 내장 서버 설정 부분입니다.port: 애플리케이션이 사용할 포트를 지정합니다. 여기서는 8081번을 사용합니다.address: 서버의 주소를 지정합니다. 0.0.0.0은 모든 인터페이스에서 들어오는 연결을 허용함을 의미합니다.사용자 정의 API 엔드포인트 설정:
your:
api:
endpoints:
- /question
- /support-form
your.api.endpoints: 사용자가 정의한 API 엔드포인트를 지정합니다. 여기서는 /question과 /support-form을 사용합니다.만약 서버 설정과 api 엔드포인트 설정을 해주지 않는다면 나중에 방화벽의 문제가 생겨 api를 사용할 때 time out이 발생하게 됩니다.
이렇게 수정을 했다면 다시 한 번더 jar 파일을 생성 후 docker build를 하면 됩니다.
저는 아래와 같이 입력하였습니다.
docker build -t 2024-msg-server:dev1.3 .
docker tag 2024-msg-server:dev1.3 mic050r/2024-msg-server:dev1.3
docker push mic050r/2024-msg-server:dev1.3
이제 우분투에서 spring 이미지를 다시 풀 받은 후 실행을 다시 해보면 아주 잘 작동하는 것을 볼 수 있습니다.
docker run -d -p 8081:8080 --name msg-server-container-dev1.3 mic050r/2024-msg-server:dev1.3


이해가 안되는 부분이 있다면 언제든지 물어봐주세요!