Skip to content

Docker Hub Repository에 Docker Image 올리기 정리편

이은비 edited this page Nov 24, 2022 · 1 revision

🐳 Docker Hub Repository에 Docker Image 올리기 - 정리편

사용 계기

짧은 개발 기간으로 인프라 구축에 시간을 할애할 수 없어, Docker를 이용해 로컬 상의 개발환경과 임시로 운영환경을 동일하게 가져가고자 선택했다. Docker는 가상의 VM에서 동작하고 리눅스 기반이다. Docker 위에 이미지를 기반으로 컨테이너를 만들어 실행하면, 하나의 컨테이너 안에 디비 서버와 레디스 서버, 어플리케이션 서버를 동시에 실행할 수 있다. 단, 디비의 경우 컨테이너가 지워지면 그 내부의 데이터도 함께 사라지기 때문에 이를 백업해 둘 필요가 있다. 이를 위해서 Docker에서는 볼륨을 지원한다.

Spring Boot Application Image 만들기

현재 스프링 프로젝트를 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 을 해주어야 한다.

image

인텔리제이 기준으로 우측에 Gradle 탭에서 해당 버튼을 찾을 수 있다.

이후, docker-compose.yml 파일을 작성해 각각의 이미지들을 연결하면 된다.

Docker-compose

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 버전으로 이미지를 만든다는 의미이다.

image

이후 push를 해보자.

docker push leb0205/duaily_backend:0.0.1  
image image

성공적으로 올라간 것을 확인할 수 있다.