Docker 이미지 만들기

Docker 이미지 만들기

전 게시글에서 Docker의 개념을 공부했으니

이제 실습을 해보자

Spring boot 프로젝트를 Docker위에 올려보자

Docker image 만들기

도커 이미지가 컨테이너를 생성해 준다.

도커 이미지는 컨테이너를 실행하기 위해 필요한 파일들의 모읍입니다.

이미지를 만들기 위해서 Dockerfile이라는 이미 생성 파일이 필요합니다.

따라서 먼저 Dockerfile을 만들어봅니다.

Dockerfile은 docker 명령문을 이용해서 해당 프로젝트로 이미지를 만들 때, 어떤걸 이미지로 만들고 어떤 설정을 해줄 것인지 알려주는 파일이다.

Dockerfile 의 구조

FROM : 베이스 이미지를 의미합니다. Docker 이미지는 base이미지부터 시작해 기존 이미지위에 새로운 이미지를 중첩해서 여러 단계의 이미지 층( layer)를 쌓아가며 만들어집니다.

COPY : 이미지를 만들 때 어떤 파일을 복사해서 저장할 것인지를 의미 합니다.(.jar 파일은 springboot 실행을 위한 파일입니다)

ENTRYPONIT : 이미지 실행 시 항상 실행되야 하는 커맨드 설정 명령문입니다.(spring boot 실행 명령문을 적어줍니다.)

FROM openjdk:8-jdk-alpine #베이스 이미지 파일 COPY build/libs/demo-0.0.1-SNAPSHOT.jar app.jar #컨테이너 내부로 파일 복사 ENTRYPOINT ["java","-jar","/app.jar"] #컨테이너 생성되면서 실행

[베이스 이미지 파일은 Docker hub에서 종류를 확인할 수 있습니다]

springboot build 폴더에 jar 파일이 없다면

아래의 과정으로 만들어 줍니다.

build로 jar 파일 만들기

설정을 마쳤으니, 이미지 파일을 생성해 봅니다.

Docker file이 있는 곳에서 이미지를 만들어야합니다.

이미지 생성 명령어

-t : 이름을 나타냄

docker build -t 이미지이름 . //docker build -t {이미지명}:{태그} {Dockerfile 파일 위치}

태그 : 태그는 도커 레포지토리(이미지)의 버전을 관리하기위해 붙혀주는거다. default는 lateast이다.

이미지 생성 카피에러

COPY 프로젝트 이름을 만들 프로젝트.jar이름이랑 같게 해야하고 소문자로만 해야한다. 후

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

나오면 이미지 카피 성공

도커 이미지 생성 확인

아래의 명령어로 이미지 생성 목록을 확인할 수 있습니다.

docker images

도커 이미지 목록

도커 이미지를 컨테이너화 시키기

컨테이너는 실제로 실행되는 프로세스 입니다.

그다음 만들어준 이미지를 실행시켜준다.

-p : 로컬포트에서 접속시 어떤 도커포트랑 연결할 것인지를 의미하는 명령문입니다.

-d : 백그라운드 실행을 의미합니다.

docker run --name maru-spring -p 8080:8080 -d maru-spring docker run --name '이미지 이름' -p '로컬포트:도커포트' -d 이미지이름 (-d는 백그라운드 실행을 의미)

도커가 실행이 완료되면 요상한 문자가 나타납니다. 어떤 도커 이미지가 실행중인지 확인해 봅니다.

docker ps

사진의 PORTS를 보면 로컬의 어떤 포트가, 도커의 포트랑 연결되어있는지 볼 수 있습니다.

이렇게 이미지가 돌아가고 있다면, spring에서 프로젝트를 돌리지 않아도 해당 포트로 웹사이트에 접속할 수 있습니다.

(이즈 구우웃 신기하다)

Docker 컨테이너 이미지 지우기

컨테이너는 Stop 명령어 중지 후에

rm 명령어로 지웁니다

ps -a : 실행중인 프로세스와 종료중인 프로세스 모두 보여줍니다.

Docker hub에 Push하기 (이미지 업로드)

먼저 도커허브에 레포지토리를 만들어 둡니다.

https://hub.docker.com/

터미널에서 도커에 로그인을 해야합니다.

docker login

그 다음 업로드할 이미지를 태깅해 주어야합니다.

docker tag maru-spring thalals/maru-spring docker push {리파지토리 이미지명}:{태그}

태깅 결과

그리고 태깅한 이미를 도커허브의 레포지토리에 push해 줍니다.

docker push thalals/maru-spring docker push {리파지토리 이미지명}:{태그}

푸시 완료

도커 허브 레포지토리에 이미지 업로드 완료

도커 허브 이미지 Ec2에 배포하기

먼저 EC2를 하나 생성하고, 터미널에서 EC2로 접속합니다.

EC2 프리티어 생성 및 접속 : https://thalals.tistory.com/120

접속 성공

EC2에 도커 설치하기

vi install.sh

도커생성 쉘 스크립트

sudo apt-get update sudo apt-get -y install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install -y docker-ce sudo usermod -aG docker $USER

결과

1. 요롷게 ec2에 도커 설치 쉘스크립트 파일을 만든다.

2. install 파일에 실행권한을 준다음(chmod 777)-요로면 색깔 바뀜

3. 파일을 실행해서 도커를 설치해준다.

./install.sh

쉘스크립트 파일 설치 도커 잘 깔렸는지 확인

도커 pull 받기

ec2에서 도커에 올라가있는 이미지를 pull 받는다

docker pull {도커 허브 이미지명}:{태그}

docker pull

docker 실행

pull 받아서 다운받은 도커 이미지를 실행하면, ec2 에서 실행중인 컨테이너를 확인할 수 있다.

docker run --name {컨테이너 이름} -p 5000:5000 -d {이미지 이름}:{태그}

그러면 인자 localhost:8080으로 접속할 수있는데

그 전에 AWS에서 8080포트를 열어주어야한다.

EC2인스턴스 선택 > 보안 > 보안그룹 > 인바운드 규칙 편집 > 규칙 저장

이렇게하면, spring boot 백엔드 부분은 배포가 끝난다.

이제 프론트 부분을 해주어야 한돠

728x90

반응형

from http://thalals.tistory.com/240 by ccl(A) rewrite - 2021-12-07 22:27:37