나는 이전에 mvc방식으로 간단한 프로젝트를 만들었다.
오늘 포스팅에서 그 프로젝트를 배포하겠다는게 '아니라'
도커를 사용해서 이렇게 배포하는구나.. 라는 느낌으로 맛보기 배포를 해보도록 하겠다
먼저 aws서버를 하나 만들어주자

aws 인스턴스 생성
'시작' 버튼눌러주기

서버는 보통 ubuntu나 amzon linux를 많이 사용하는데
그냥 나는 amzon linux를 사용하도록 하겠다.
아키텍쳐를 arm으로 해준 이유는...
나는 애플 실리콘칩 (m2)를 사용하고 있는데
이게 x86에서는 호환성 에러가 계속해서 발생해서 아키텍쳐를 저렇게 해주었다.

새롭게 키페어를 생성하고 RSA, .pem을 선택해준다.
키페어 생성 버튼을 누르면 나는 /downloads로 저장된다.

사실상 보안그룹을 나중에 따로 생성할것이기 때문에 그냥 넘어가도 된다.
다른거 건드릴거 없이 그냥 서버를 생성해보자.

성공적으로 서버가 잘 생성된것을 확인할 수 있다.

그 다음, 보안그룹으로 이동

위에 보안그룹 생성 클릭

우리는 7000번 포트를 사용할거라서 포트범위를 7000으로 적어주고
anywhere-로 해줘서 모든 포트를 열어줄것이다.

인스턴스로 이동해서 보안그룹변경

아까 만들어준 보안그룹을 선택하고 오른쪽에 보안그룹 추가를 눌러준다.
기존에 있는건 그냥 삭제하고 저장버튼을 눌러주면 된다.


그다음 터미널을 이용해서 서버로 접속해보자.
인스턴스로 와서 해당 인스턴스를 클릭하면 우측 상단에 '연결'버튼이 보일것이다.

SSH클라이언트 탭으로 이동하면
아래쪽에 ssh -로 시작하는 문장이 있는데 '복사'
'터미널'에 '붙여넣기'

혹시 권한에러가 뜬다면 chmod(위에 있음 ) 로 권한을 변경해주고
다시 실행
그러면 접속이 잘 되는걸 확인할 수 있다.
그리고 pem키를 다운받은 곳에서 실행해야한다.
이제 매우 간단한 서버를 만들어보자

위 처럼 만들어주고 의존성을 추가해준다음

application.properties에 다음과 같이 적어준다.

그 다음 우리는 hello.html을 만들어서 보여줄 화면을 만들어보자.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body style="margin: 40px">
<h1>Hello World</h1>
<img src="/img/hello-world.jpeg" alt="Hello World">
</body>
</html>
최상단 루트에 dockerfile도 만들어주자.

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/deploy-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
EXPOSE 7000
자바 버젼은 17
target에 deploy-0.0.1 어쩌구 .jar파일을 만들어준다
포트는 7000번

그리고 html 파일에서 보면 이미지를 가져오고 있는데
인터넷에서 대충 마음에 드는 사진을 가져오자
@Controller
public class DockerController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
api앤드포인트 추가
우리는 나중에 배포 후, http://{ec2서버포트}:7000/hello 로 들어가서 해당 이미지가 잘 보이는지 확인할것이다.
Docker Hub Container Image Library | App Containerization
Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.
hub.docker.com
우리는 해당 도커파일을 도커허브에 올린다음 ec2서버에서 pull로 가져올것이기 때문에 도커허브가 없는 사람들은 회원가입을 해보자

docker login
을 통해 로컬환경에서 로그인을 해준다.
만약 님들 컴퓨터에 이미 도커데스크탑 로그인이 되어있다면 나처럼 그냥 바로 넘어갈텐데, 없다면
로그인하라고 나온다.
그냥 로그인해주면 된다.

mvn clean package
해당 명령어로 .jar파일을 만들어준다.

아까 말했던 것처럼 /target아래의 경로에 .jar파일이 생성된 것을 확인

docker build -t simpledeploy .
해당 명령어로 .jar파일을 simpledeploy라는 이름으로 빌드해줄것이다.

docker tag simpledeploy johoon/simpledeploy
태그를 해주고
docker push johoon/simpledeploy
나의 도커허브에 해당 이미지를 올려주자.
다시 ec2서버로 돌아오자.
sudo yum update -y
sudo yum install -y docker

해당 명령어를 통해 도커를 설치해야한다.
sudo systemctl start docker
sudo systemctl enable docker
docker --version

시스템을 다시 시작하고
도커를 항상 시작하도록 변경하고
도커가 잘 설치되었는지 확인하자.
sudo usermod -aG docker ec2-user
그냥 접속하려고 하면 권한 어쩌구 나올텐데, ec2-user에서 도커에 접속할 수 있도록 해당 명령어를 통해 설정해주어야한다.
그리고 해당 변경사항을 적용하려면
터미널창에서 ssh -어쩌구로 시작하는 명령어로 다시 ec2에 접속해주자.
다시 접속

그다음 docker pull {도커허브아이디}/이미지
를 입력해서 이미지를 가져오자

해당 명령어를 통해 7000서버에서 서버를 실행시켜보자.

님들 ec2 서버에 보면 퍼블릭 ipv4주소가 잇다.

퍼블릭ipv4주소:포트번호/hello
로 들어가보면
이렇게 좀전에 만들었던 html이 보이게 된다.
끝

'Docker' 카테고리의 다른 글
| Docker volumes를 통해 안전하게 데이터를 지켜보자! (0) | 2024.11.21 |
|---|---|
| Docker개발환경에서 빠르게 코드 변경사항 저장하기 (3) | 2024.11.20 |
| docker를 이용해서 팀 프로젝트 초기환경 세팅을 해보자! (0) | 2024.11.20 |