임도현의 성장
Docker & Docker Hub 본문
🐳 도커란?
Docker는 애플리케이션과 실행 환경 코드, 라이브러리, 의존성 등을 하나로 묶어 컨테이너라는 가상화된 독립 환경에서 실행할 수 있게 해주는 플랫폼입니다.
🥳 내가 공부한 Doucker 정리
어플리케이션을 패키징 할 수 있는 툴이라고 생각합니다. 컨테이너 라고 불리는 하나의 작은 소프트웨어 유닛 안에 우리 어플리케이션과 그에 필요한 시스템 환경 설정 모든 디펜더시를 하나로 묶어서 다른 서버 다른 PC등 어떤 곳에도 쉽게 배포하고 안정적으로 구동할 수 있게 도와줄 수 있는 툴이라고 생각합니다.
🏃♂ 실행 순서
컨테이너를 만들기 위해서는 도커파일을 만들고 도커 파일을 이용해서 이미지를 생성해야 컨테이너를 구동할 수 있습니다.
- 도커파일 이란?
- 도커파일은 컨테이너를 어떻게 만들어야 하는지 설명서 같은 존재이다.
- 어떤 프레임워크나 라이브러리를 설치해야 하는지 그리고 필요한 환경 변수도 설정 등등을 할 수 있습니다.
- 이미지란?
- 작성한 도커파일을 이용해서 이미지를 만들 수 있다 이미지 안에는 우리가 어플리케이션을 실행하는데 필요한 코드 라이브러리 세팅들이 포합되어있음
- 실행되고있는 우리 어플리케이션을 캡처해서 불변의 상태로 만든다.
- 컨테이너란?
- 컨터이너 안에서 이미지를 읽어 드려 어플리케이션을 구동시킨다
😈 도커 파일 생성
SpringBoot로 제작된 프로젝트 최상단 폴더에 Dockerfile 이라는 파일을 생성한다.
- Base Imge 설정
- FROM : Docker 이미지의 기반이 되는 이미지를 설정합니다.
- openjdk:17-jdk-slim : OpenJDK 17 기반의 이미지
- 애플리케이션 디렉토리 설정
- WORKDIR: 컨테이너 내에서 작업 디렉토리를 설정합니다.
- /app : 디렉토리를 컨테이너 내부에서 애플리케이션의 루트 디렉토리로 사용합니다.
- JAR 파일 복사
- COPY: 호스트 시스템(개발 환경)에서 컨테이너로 파일을 복사합니다.
- build/libs/hello-0.0.1-SNAPSHOT.jar : Spring Boot 애플리케이션을 빌드한 JAR 파일 경로
- 일반적으로 Gradle 프로젝트에서 빌드 결과물은 build/libs/ 폴더에 생성됩니다.
- /app/hello-0.0.1-SNAPSHOT.jar : 컨테이너 내 /app 디렉토리에 JAR 파일을 복사합니다.
- 애플리케이션 실행
- ENTRYPOINT : 컨테이너가 시작될 때 실행할 명령어를 지정합니다.
# Base image 설정
FROM openjdk:17-jdk-slim
# 애플리케이션 디렉토리 설정
WORKDIR /app
# JAR 파일 복사
COPY build/libs/hello-0.0.1-SNAPSHOT.jar /app/hello-0.0.1-SNAPSHOT.jar
# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "hello-0.0.1-SNAPSHOT.jar"]
💀 Docker 이미지 빌드
SpringBoot 프로젝트안에 Termainal로 다음 실행 명령어를 입력한다.
이렇게 이미지를 생성하고 다운로드 받았던 Docker Desktop에 들어가보면 이미지가 생성된 것을 알 수 있다.
docker build -t 이름 .
🐯 Docker 컨테이너 실행
컨테이너를 실행할려면 포트를 연결해야 한다 똑같이 SpringBoot 프로젝트안에 Termainal에서 다음 명령어를 실행하면 된다. 이 후 어플리케이션을 실행하지 않아도 http://localhost:8008/ 로 들어가면 실행이 된다.
docker run -p 8008:8008 이름
🤑 Docker Hub란?
도커 허브를 사용하면 도커 이미지를 업로드하여 저장하고 필요한 경우 해당 이미지를 다른 사용하자와 공유할 수 있다.
쉽게 말하면 깃허브와 같은 역할 Docker 이미지를 중앙 저장소에서 관리 하고 공유하는 플랫폼이다.
Docker Hub를 사용할려면 우선 Cmd에서 Docker Hub에 로그인을 하야 합니다.
- docker login 라는 명령어 실행
- 현재 로컬에 생성된 Docker 이미지 확인 명령어 : docker images
- 이미지 태그 추가 : docker tag <이미지 Id> < Docker Hub Id>/<이미지 이름>:< latest >
- 이미지 푸시하기 : docker push < Docker Hub Id>/<이미지 이름>:< latest >
- Docker Hub에서 확인
Docker Hub에서 이미지 Pull 받는 방법
- 이미지 Pull 받기 : docker Pull <Docker Hub Id>/<이미지 이름>:< latest >
- 컨테이너 실행 방법 : docker run -d -p <Host_Port>:<Container_Port> <Docker Hub Id>/<이미지 이름>:< latest >
- 예시 : docker run -d -p 8080:8080 < Docker Hub Id>/<이미지 이름>:< latest >
정리
// Docker 로그인
docker login
// Docker 이미지 리스트 확인 명령어
docker images
// 이미지 태그 추가
docker tag <이미지 Id> < Docker Hub Id>/<이미지 이름>:< latest >
// 이미지 푸시하기
docker push < Docker Hub Id>/<이미지 이름>:< latest >
// 이미지 풀 받기
docker Pull <Docker Hub Id>/<이미지 이름>:< latest >
// 이미지로 컨테이너 실행
docker run -d -p <Host_Port>:<Container_Port> <Docker Hub Id>/<이미지 이름>:< latest >