Docker Desktop 설치 후 실행하여 기본적인 설정 완료하기 !
sudo yum update -y
sudo yum install docker
docker -v
sudo service docker start
sudo usermod -aG docker ec2-user
이제 Docker Image를 생성해 Docker Hub에서 가져와 EC2에서 실행할 수 있는 환경이 만들어짐
Your-Spring-Project/Dockerfile
# Dockerfile
# JDK Image Start
FROM openjdk:21
# 인자 설정 - JAR_File
ARG JAR_FILE=build/libs/*.jar
# jar 파일 복제
COPY ${JAR_FILE} app.jar
# 실행 명령어
ENTRYPOINT ["java", "-jar", "app.jar"]
※ Dockerfile 지시어 참고
./gradlew clean bootJar
gradlew clean: 이전 빌드 결과물 삭제
gradlew bootJar: 실행가능한 jar를 빌드 (plain jar 생성 X)
plain jar 파일 생성을 막기 위한 방법으로
build.gradle
에 아래의 설정을 추가하는 방법도 있음jar { enabled = false }
도커 허브에 업로드 하기 전 로그인을 수행
docker login -u [username]
[password]
# 기본 커맨드
# -t: 태그 설정 (생략 시 'latest')
# docker build -t [DockerHub ID]/[이미지명]:[태그명] [DockerFile 위치]
# 애플 실리콘 맥 사용 시 linux/arm64로 만들어지기 때문에 --platform linux/amd64를 추가해야 함
docker build --platform linux/amd64 -t zosungwoo/demo .
이후 docker images
명령어를 통해 생성된 이미지를 확인할 수 있음
# docker push [DockerHub Id]/[image 파일명]
docker push zosungwoo/demo
추가로 public은 안전하지 않을 것 같다고 생각해
DockerHub Repository - Settings - Visibility settings
에서 private으로 변경하였음 (로그인 후 pull 가능)
docker pull [dockerHub Id]/[이미지명]
# 기본 커맨드
# -d: detach mode (백그라운드로 실행됨)
# -p: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출하기 위해 사용
# docker run -d -p [호스트 port]:[컨테이너 port] [DockerHub ID]/[이미지명]
# : Docker Image를 실행한 형태인 컨테이너로 만드는 명령어
docker run -d -p 8080:8080 zosungwoo/demo
이미 한 번 이미지를 컨테이너화 했을 때,
docker run
명령어를 다시 사용하면 안 됨
docker run
의 경우 Docker Hub에서 해당 이미지를 pull & 컨테이너화하는 작업이기 때문에,docker ps -a
를 사용해보면 같은 이미지가 여러 개 생성되어 있는것을 확인 할 수 있음
-> 따라서 이미 컨테이너가 존재한다면docker start [컨테이너명 or ID]
로 실행
# 실행중인 컨테이너 확인
docker ps
# 모든 컨테이너 확인
docker ps -a
• Dockerfile을 Build해서 Docker Image를 생성함
• Docker Image 파일을 Docker Hub에 Push함
• 서버(AWS EC2)에서 Docker Hub에 Push된 Docker Image를 Pull로 받아옴
• docker run
명령어를 통해 Docker Image 파일을 실행함