0. 준비물
SSH 접속 툴 : Mobax
Putty와 FileZilla를 합쳐놓은 듯한 프로그램이다.
사용하기 편하고 무료버전도 충분하다. 다운로드하자.
https://mobaxterm.mobatek.net/download.html
참고 내용를 읽어보고 시작하자.
https://ondolroom.tistory.com/815
https://ondolroom.tistory.com/881
1. SpringBoot 프로젝트 준비 및 세팅
간단한 todoList를 준비하였다. 아래에서 다운로드 받을 수 있다.
프로젝트 환경
//스프링부트 버전
springboot 2.6.2
// 자바 환경
java 1.8
// 데이터베이스
h2 mem database
// 포트
8082
위 프로젝트를 빌드하여 jar 파일로 만들자.
파일명은 springdatajpa_project 가 앞에 붙도록 제작하는 것을 추천한다.
(ex springdatajpa_project-asdf.jar 등)
빌드 툴이 없다면 아래 링크를 따라하여 빌드해보자.
2. AWS EC2 세팅하기
AWS는 콘솔화면이 자주 바뀐다.
20220425날짜 기준으로 작성 중이다.
AWS 아이디가 없다면 가입하자.
가입하고 인스턴스 시작을 눌러 클라우드 서버를 만들어보자.
이름은 없어도 되나 구분을 위해 적어주자.
AMI는 서버의 OS를 의미한다.
테스트 결과 도커 환경을 원활히 작동시키는 Ubuntu을 추천한다.
인스턴스 유형은 서버의 성능을 정하는 부분이다.
현재 연습용이기 때문에 프리티어(AWS 신규 가입시 1년간 무료) 유형을 선택하자.
키페어는 보안접속을 위한 것이다.
키페어가 있다면 선택해주고, 없거나 새로만들고 싶으면 새 키 페어 생성으로 생성하자.
(생성 시 기본적으로 키페어 유형은 RSA, 여기서는 Mobax를 사용하므로 파일 형식은 pem 추천)
기존에 보안 그룹을 만들어 두지 않았다면 아래와 같이
SSH 트래픽허용 / HTTPS 트래픽 허용 / HTTP 트래픽 허용을 선택해주자.(22 / 443 / 80 인바운드 포트가 열린다.)
(추후 다른 포트를 사용할 경우 보안그룹에서 포트 설정을 해줘야 된다는 점을 기억하자.)
용량은 10기가 이상 gp3를 이용하는 것을 추천한다.
aws신규 가입자는 프리티어로 비용없이 사용가능 하기 때문에 30기가로 설정해도 무방하다.
모두 선택했다면 인스턴시작을 눌러주자.
모든 인스턴스 보기를 눌러 확인해보자.
(늦게 뜨는 경우가 있으니 새로고침하거나 기다려보자.)
퍼블릭 IPv4 주소를 확인하자.
(해당 아이피는 동적 아이피이다. 인스턴스를 중지하고 재실행하면 바뀔 수 있다. 바뀌지 않게 하려면 탄력적 IP를 사용하자.)
3. EC2 접속 및 도커 세팅하기
MobaXterm을 켜서 접속 세팅을 하자.
Session을 누른다.
SSH 클릭
Reomte host는 EC2서버의 퍼블릭 주소를 선택한다.
Specify username은 리눅스 서버의 기본유저명을 말한다.
우분투의 경우 ubuntu
포트는 22
Advanced SSH settings를 클릭하고 Use private key를 체크한다.
EC2를 구성할 때 생성한 키페어를 선택하여 넣어준다.
모두 작성했다면 OK를 눌러주자.
아래와 같이 뜨면 접속에 성공한 것이다.
아래 링크를 참고하여 우분투에서 도커를 세팅해보자.
https://shanepark.tistory.com/237
4. 프로젝트 배포해보기
먼저 편안한 작업을 위해 Super User 권한을 받아오자.
원하는 경로에 폴더를 하나 만들어주자.
필자는 project 라고 이름 지었다.
해당 디렉토리로 이동해주자.
도커파일을 만들자.
확장자 없이 파일을 하나 만들고 이름을 Dockerfile 로 만든다.
(만들기 어렵다면, 예제 프로젝트 내부에 도커파일을 만들어 두었으니 사용하면된다.)
아래와 같이 내용을 입력해주자.
(1번 Jar파일 제작에서 정해준 이름에 따라 아래 ARG부분을 적절히 수정해주자. )
아래에 설명이 있으니 참고하자.
# 도커 허브에서 이미지를 가져와서 이미지를 작업한다
# FROM (이미지 이름:버전)
#FROM openjdk:8-alpine3.9
FROM openjdk:8-jre-alpine3.9
# 컨테이너 실행 전 작동할 명령
# RUN (명령)
# 타임존 설정 (설정을 하지 않으면 시간 저장시 다른 시간대로 저장됨)
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone
# 컨테이너 내 작업 경로
# WORKDIR (경로)
WORKDIR /app
# 작업 파일을 변수화 하기
# ARG (변수명)=(파일명)
ARG JAR_FILE=springdatajpa_project*.jar
# 작업 파일을 컨테이너로 복사
# COPY (파일명 또는 ${변수명}) (복사할 파일명)
COPY ${JAR_FILE} application.jar
# 컨테이너 시작 시 내릴 명령 (CMD와 ENTRYPOINT 차이 확인)
# ENTRYPOINT [(명령),(매개변수),(매개변수),(...)]
ENTRYPOINT ["java","-jar","application.jar"]
도커파일과 Jar 파일을 드래그하여 폴더에 넣어주자.
도커 배포 순서
1. 이미지 만들기 docker bulid ~
2. 컨테이너 만들기 docker create
3. 컨테이너 실행하기 docker start
(컨테이너 만들기와 실행하기를 동시에 할 경우 docker run을 사용한다.)
해당 프로젝트 디렉토리로 이동해보자.
cd /home/ubuntu/project/
프로젝트를 이용하여 이미지를 만들어보자.
docker build [옵션] [ -t 이미지 명] [도커파일 경로]
-t 는 이미지에 이름을 붙여준다는 뜻이다.
. 은 도커파일의 경로이다. 아까 도커파일 경로로 이동했기 때문에 . (현재경로)로 입력한다.
docker build -t test_proj_img .
성공적으로 만들어 졌다면,
아래 코드로 이미지를 확인해보자.
docker images
컨테이너를 만들어 보자.
docker create [옵션] [-p 외부포트:내부포트] [--name 컨테이너명] [이미지명]
프로젝트는 8082포트로 제작하였지만 외부에서 80포트로 들어올 경우를 가정하여 제작한다.
docker create --restart=always -p 80:8082 --name test_proj test_proj_img
컨테이너가 생성되었는지 확인해보자.
-a 옵션은 모든 컨테이너를 보여준다는 뜻이다. (-a를 빼면 실행 중인 컨테이너만 보인다.)
docker ps -a
도커를 실행한다.
docker start test_proj
#참고 - create와 start를 동시에 할 경우 run 명령어를 사용한다.
작동 로그를 확인한다.
-f 옵션은 컨테이너 내부에 로그를 지속적으로 보여줄 때 사용한다.
docker logs -f test_proj
로그를 벗어날 때에는 Ctrl + C 를 사용한다.
컨테이너 안의 리눅스 환경을 확인하려면
// 일반 이미지 기반 컨테이너
docker exec -it test_proj /bin/bash
또는
// alpine이나 slim 이미지 기반 컨테이너
docker exec -it test_proj /bin/sh
접속이 된 것을 확인할 수 있으며 도커파일의 WORKDIR로 시작하는 것을 볼 수 있다.
해당 컨테이너에서 나갈 때에는 exit를 입력한다.
웹에서 확인해보자.
자신의 퍼블릭 아이피로 접속해보면
아래와 같이 나오면 성공이다.
'Infra > Linux' 카테고리의 다른 글
aws ec2 시작 및 도커로 서버 배포 (0) | 2022.01.17 |
---|---|
AWS 도메인 등록 / 호스팅 관리 / HTTPS 적용 (0) | 2021.09.08 |
리눅스 / 소유권 변경 / 파일에 출력 > >> / nohup (0) | 2020.07.15 |
리눅스 mkdir 폴더 디렉토리 만들기 / cp 복사 / mv 이동 / 검색 which whereis find (0) | 2020.07.13 |
리눅스 명령어2 (0) | 2020.07.09 |