docker란 무엇인가?
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.
AWS에서 Docker를 실행하면 개발자와 관리자가 어떠한 규모에서든 매우 안정적이며 저렴한 방식으로 애플리케이션을 구축, 제공 및 실행할 수 있습니다.
Docker란 무엇입니까? | AWS
Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc
aws.amazon.com
homebrew를 사용하면 편리한점
터미널에서 다음 코드를 cmd + v 해준다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Next step : 아래 부분에 있는 코드를 cmd + v 해준다.
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/사용자/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
이 과정을 거치면 homebrew 설치 완료(설치 되었는지 확인하려면 brew --version 을 입력해 버전 확인)
cask 패키지 설치
cask를 설치하는 이유? 우리가 일반적으로 사용하는 gui환경의 맥 OS 어플리케이션(구글, 아톰 등)의 설치와 관리를 위함이다.(homebrew의 확장)
brew install cask
homebrew의 설치를 마쳤으면 이를 기반으로 이제 docker를 설치해야 한다.
Homebrew
The Missing Package Manager for macOS (or Linux).
brew.sh
homebrew를 이용한 docker 설치
brew install --cask docker
--cask 옵션을 설정해주면 mac에 docker를 설치하게 되고, docker-compose 및 docker-machine도 함께 설치해준다.
1. AWS EC2 인스턴스(ubuntu 22.04 LTS, 프리 티어(무료) 생성 후, 터미널에서 대여한 클라우드 서버로 들어간다.
/Users/kimseungbeom/Desktop/aws-key/daily1313-aws-key.pem ubuntu@퍼블릭 IP주소
2. 클라우드 서버 시간을 한국 시간으로 변경해준다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
3. app 디렉토리 생성 mkdir app
4. 배포에 필요한 목록들을 명령어를 사용해 다운
# apt-get 업데이트
sudo apt-get update
# Git 설치
sudo apt-get install git
sudo apt install git
# Java 11설치 (본 프로젝트는 Java11 버전입니다.)
sudo apt-get install openjdk-11-jdk
# 도커 사용에 필요한 툴 설치
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 도커 공식 GPG 키 추가
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 도커 레포지토리 설정
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 도커 엔진 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 도커 권한 설정
sudo usermod -aG docker $USER
# Docker compose 설치
sudo curl -L https://github.com/docker/compose/releases/download/v2.1.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
더불어, 우리가 사용하고 있는 AWS EC2 서버의 램이 1기가 밖에 되지 않아, HDD의 일정공간을 RAM처럼 사용할 수 있도록 SWAP 메모리 지정
1기가 -> 2기가 까지 확장시킬 수 있게 된다.
# Swap 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# Swap file 읽기 및 쓰기 권한 업데이트
sudo chmod 600 /swapfile
# Swap 영역 설정
sudo mkswap /swapfile
# Swap 공간에 Swap file을 추가하여 Swap file을 즉시 사용할 수 있게 변경
sudo swapon /swapfile
-----------------------------------------------------------------------
## Swap 파일 활성화 하기 /etc/ 디렉토리 이동 후 fstab 파일 편집
# 1-1. etc 디렉토리 이동
cd ~/../../etc
# 1-2. fstab 파일 수정하기
sudo vi fstab
# 1-3. fstab 파일 맨 아래 줄에 다음과 같은 코드 추가
/swapfile swap swap defaults 0 0
## 만약 코드 변경이 안 된다면 fstab 파일에 권한을 부여해주시면 됩니다.
5. /~app 디렉토리에서 git clone
6. cd 프로젝트 name
7. chmod 권한을 줘서 실행 권한 부여 및 빌드
# gradlew 실행 권한 주기
sudo chomd 777 ./gradlew
# 빌드
./gradlew build
주의사항
local에서 mysql 접속을 끊어줘야 한다(충돌 방지)
cd /app/프로젝트명/build/libs로 이동 후 명령어를 통해 도커로 서버와 데이터베이스를 띄운다.
# 도커로 서버 + 데이터베이스 띄우기
docker compose up --build -d
# 도커로 하나만 띄우기
docker compose up --build -d {containerName}
# 컨테이너 중지 시키기 (서버 및 데이터베이스 중지)
docker compose down
# 하나만 중지 시키기
docker compose stop {containerName}
# 스프링 서버 로그 보기
docker compose logs backend
<주의사항>
libs에 담겨있는 Dockerfile, docker-compose.yml 파일들을 vi 에디터에서 직접 만들어줘야 한다.(github 푸쉬 및 커밋이 되지 않기 때문이다)
<참고 자료>
https://blog.naver.com/sosow0212/222883930459
[요고요구] API 서버 제작 #4 : 스프링 AWS 배포하기 (docker, 프리티어 램 늘리기, https) - 1
[요고요구] API 서버 제작 #4 : 스프링 AWS 배포하기 (docker, 프리티어 램 늘리기) - 1 서버를 다 ...
blog.naver.com
'DevOps > Docker' 카테고리의 다른 글
[Docker] Dockerfile을 이용해 SpringApplication 빌드 및 실행 (0) | 2023.09.14 |
---|---|
[Docker] Docker-Compose를 사용하여 Springboot와 ELK stack 연동 (0) | 2023.09.04 |
[Docker] Docker-Compose를 사용하여 Springboot, Mysql 연동 (0) | 2023.08.31 |
[Docker] Docker, Docker-Compose, Dockerfile (0) | 2023.08.31 |
[Docker] Container vs VM (0) | 2023.08.31 |