본문 바로가기

Back-end(Spring Framework)/필기일지

240110 [Back-end] Spring Framework 배포/ docker 도커 / AWS

[24.01.10]  103차

 

<<진도>>

[Back-end] Spring Framework

/ 배포

/ Docker 도커 활용

/ AWS

 

Docker

  1. Docker 란?
    1. Docker : 컨테이너 기반의 오픈소스 가상화 플랫폼
  2. Container 란?
    1. 컨테이너는 독립된 가상 공간에서 프로세스가 동작하는 기술
    2. 하나의 서버에 여러개의 컨테이너를 띄울 수 있음
    3. 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화 할 수 있음
    4. 컨테이너마다 다른 프로그램, 다른 버전을 적용할 수 있으며 각자 독립적으로 실행할 수도, 서로 연동해서 사용할 수도 있음
    VM(Virtual Machine)과 비슷한 개념이지만, VM은 각각에 OS를 올려서 사용해야 하고 자원을 할당해서 사용하는 반면, 컨테이너 기반 가상화 방식은 Host OS와 Docker 엔진 위에서 바로 동작하기 때문에 성능이 좋고 필요한 만큼의 자원만 사용해서 사용함
  3. Docker Image 란?
    1. 도커 이미지에는 실행 가능한 어플리케이션 소스 코드 뿐만 아니라 실행에 필요한 모든 툴, 파일, 라이브러리 및 설정값 등이 포함
    2. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않고 그대로 남아 있음
    3. Git으로 저장된 내용들이 Github에 올려지는 것과 같이, Docker Image는 Docker Hub에 업로드 되어서 공유되고 다운 받을 수도 있음
  1. Docker File 이란?
    1. Docker에서 이미지를 생성하기 위한 용도로 작성하는 파일
    2. 생성할 이미지에 대한 정보들을 기술해 놓은 파일이라고 생각하면 됨 => Docker File을 읽으면 해당 이미지가 어떻게 구성되었는지 알 수 있음
  2. 공식 Tomcat 이미지
    https://hub.docker.com/_/tomcat
 

tomcat - Official Image | Docker Hub

tomcat •• Apache Tomcat is an open source implementation of the Java Servlet and JavaServer Pages technologies

hub.docker.com

 


 

[ Docker  실습 ]

Linux 가상환경에서 Test

 

STS에서 만들어 놓은 프로젝트 docker-ver1

 

터미널에서 설치된 docker 버전 확인

 

로컬에 설치된 Docker에 톰캣 이미지를 만들어주는 명령어

 

도커 내에 image 생성

 

컨테이너가 있고 컨테이너 안에서 이미지가 실행되는 구조

 

컨테이너 생성 필요!

터미널에서 docker run tomcat:8.5

 tomcat:8.5 (생성한 이미지)

docker run tomcat:8.5

 

컨테이너 생성 (이름을 지정해 주지 않았으므로 임의 생성)

 

: 실행 중인 컨테이너의 port가 기존 윈도우에서 실행 중인 tomcat의 port와 동일하므로 작업필요

실행 중지

 

중지 후 터미널에서 다시

docker run tomcat:8.5

 

입력 시

 

이름을 지정해주지 않았으므로 임의 생성 => 컨테이너 실행 및 중지 시 컨테이너의 이름이나 id 입력필요

 

 


컨테이너를 생성하면서 이름과 포트를 지정

 

 

docker run --name tomcat-container -p 8888:8080 tomcat:8.5

 

--name 이름지정

-p 포트지정

-p 8888:8080

 

windows에서 실행되는 docker 도커의 포트 8888과 tomcat이 실행되는 8080

도커 포워딩 설정 (포트 매핑)

 

 

1. 현재 실행중인 컨테이너 보기  2. 중지된 컨테이너 포함해서 보기

 

3. 중지되어 있는 컨테이너를 실행

docker start (컨테이너id/이름)

 


 

리눅스 가상환경에서 쓰는 bash shell을 사용할 환경을 만들어주는 명령어 -it (interactive terminal)

docker exec -it tomcat-container /bin/bash

 

=> 이제 리눅스의 bash shell 명령어를 입력하는 터미널이 됨

 

ls는 윈도우의 dir

 

=> tomcat경로의 webapps 폴더안에 배포용으로 만들었던 war파일 *(Run as - Maven install로 생성) 을 넣어야한다.

 

톰캣의 webapps 경로로 war파일 복사 명령어

D:\fullstack\workspace-framework\docker-ver1>
docker cp target\ver1-1.0.0-BUILD-SNAPSHOT.war tomcat-container:/usr/local/tomcat/webapps

 

 

이 war를 container안에서 관리 (/usr/local/tomcat/webapps)

 

d로 시작하면 폴더 (directory)

war 파일만 복사했는데 폴더도 함께 복사됨

 

동일한 구조 폴더

 

war 이름의 context로 접속 가능 (tomcat내에서 배포한 app)

but, 배포된 앱의 이미지가 깨진다.

 

원인

war파일의 이름(context)와 local view의 /ver1/(context)가 달라서 이미지가 깨짐

 

해결법

코드 수정(변경) => 로컬 확인(정상) => war 파일 생성 => tomcat/webapps에 추가

/ver1 에서 변동으로 context를 읽을 수 있게 c:url 태그라이브러리로 코드 수정

 

war 재생성 후 tomcat-container에 배포

 


[docker-ver2] aws (원격서버에 배포)

1. 프로젝트 생성 : 로컬 실행, war생성

2. 로컬 docker    : app배포

3. github push

4. aws                : 인스턴스 생성 (서버 임대) linux환경, 설치(java, docker git)

 

더보기

aws 세팅

 

## git, docker, java 설치

sudo yum install git docker java-11-amazon-corretto

## 도커 실행

sudo service docker start

## docker 권한 설정

sudo usermod -a -G docker ec2-user

## auto-start에 docker 등록

sudo chkconfig docker on

## 인스턴스 재시작

sudo reboot

## docker 버전 확인(설치 확인)

docker version

## 최신 docker compose를 해당 링크에서 받기

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

## 권한 부여

sudo chmod +x /usr/local/bin/docker-compose

## docker-compose 버전 확인(설치 확인)

docker-compose version

 

1. docker-ver2 프로젝트 이상 없는것 확인 후 war 복사

2. docker에 app배포

ver2 경로에 복사완료

 

 

3. github에 PUSH

 

4. AWS EC2

 

인스턴스 시작

 

이름 및 OS 설정 

 

인스턴스 유형 선택

 

 

로컬에서 인스턴스 서버 접근 시 인증서 설정 (키 페어)

 

네트워크 설정

 

인스턴스 연결

 

아마존 Linux 접속

 

git, docker, java-11 설치

git, docker, java-11-amazon-corretto 3가지 설치 y enter까지

설치 후 확인은 --version 으로 버전확인

 

 

[ windows에서 했던 Docker 작업을 진행 ]

 

docker 실행

sudo service docker start

 

사용자(ec2-user)에게 docker 실행 권한 부여

sudo usermod -a -G docker ec2-user

 

자동 실행 설정

sudo chkconfig docker on

 

docker-compose를 설치하고 

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

 

 권한부여

sudo chmod +x /usr/local/bin/docker-compose

 

 

이미지(tomcat 8.5) 생성 후 확인 (windows와 동일)

docker pull tomcat:8.5

 

컨테이너 생성 후 확인 (windows와 동일)

docker run --name tomcat-container -p 8888:8080 tomcat:8.5

 

** war파일을 docker webapps에 올리기위해서 원래는 전용 프로그램이 필요하지만

간편하게 github를 활용!

 

먼저 app 경로 생성

 

app에 git 내용 클론

ls = git 숨김파일 제외하고 보임

 

target 경로에 war파일

 

container에 war파일 복사

docker cp target\ver2-1.0.0-BUILD-SNAPSHOT.war tomcat-container:/usr/local/tomcat/webapps

 


 

AWS 서비스 중인 인스턴스를 ip로 접속하기

외부에서 그냥은 접속되지 않음.

Port 8888에 대해 열어줘야하기 때문에

 

보안 탭 - 보안그룹 - 인바운드 규칙 편집 - 규칙추가

8888 / 모든 아이피에서 접속 허용

 

외부에서 ip로 접근 가능해짐

 


인스턴스 종료(삭제)

 


[ docker-ver2-homework ]

AWS 배포 복습 진행