-
Notifications
You must be signed in to change notification settings - Fork 3
Docker Hub Repository에 Docker Image 올리기 정리편
짧은 개발 기간으로 인프라 구축에 시간을 할애할 수 없어, Docker를 이용해 로컬 상의 개발환경과 임시로 운영환경을 동일하게 가져가고자 선택했다. Docker는 가상의 VM에서 동작하고 리눅스 기반이다. Docker 위에 이미지를 기반으로 컨테이너를 만들어 실행하면, 하나의 컨테이너 안에 디비 서버와 레디스 서버, 어플리케이션 서버를 동시에 실행할 수 있다. 단, 디비의 경우 컨테이너가 지워지면 그 내부의 데이터도 함께 사라지기 때문에 이를 백업해 둘 필요가 있다. 이를 위해서 Docker에서는 볼륨을 지원한다.
현재 스프링 프로젝트를 Docker 이미지로 만들기 위해서는 Dockerfile을 작성해야 한다.
Dockerfile.yml
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
위의 코드와 같이 자바버전과 jar 파일 루트를 지정해서 가장 기본적인 Dockerfile을 만들면 된다.
이 파일이 실제 이미지로 만들어지기 위해서는 jar 파일이 필요하다. 그래서 bootJar
을 해주어야 한다.
인텔리제이 기준으로 우측에 Gradle 탭에서 해당 버튼을 찾을 수 있다.
이후, docker-compose.yml 파일을 작성해 각각의 이미지들을 연결하면 된다.
version: '3'
services:
mysql:
container_name: mysql
image: mysql/mysql-server:latest
environment:
MYSQL_ROOT_PASSWORD: root_pw
MYSQL_DATABASE: test_db
MYSQL_USER: test
MYSQL_PASSWORD: test_pw
command:
- --default-authentication-plugin=mysql_native_password
ports:
- "3305:3306"
networks:
- db_network
restart: always
redis:
container_name: redis
image: redis:latest
ports:
- "6378:6379"
networks:
- db_network
restart: always
spring-boot:
container_name: duaily-server
build: .
restart: always
ports:
- "8081:8080"
depends_on:
- mysql
- redis
networks:
- db_network
networks:
db_network:
driver: bridge
스프링 어플리케이션을 가장 아래에 둔 이유는 앞에 디비가 실행되어야 스프링도 실행되기 때문이다.
도커 허브에는 스프링 이미지만을 올린다.
docker build -t leb0205/duaily_backend:0.0.1 .
t는 태그를 설정하는 옵션이다. leb0205/duaily_backend 라는 이름과 0.0.1 버전으로 이미지를 만든다는 의미이다.
이후 push를 해보자.
docker push leb0205/duaily_backend:0.0.1
성공적으로 올라간 것을 확인할 수 있다.