DevOps/Docker

Docker

SeungbeomKim 2022. 10. 4. 22:34
반응형

docker란 무엇인가?

 

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

AWS에서 Docker를 실행하면 개발자와 관리자가 어떠한 규모에서든 매우 안정적이며 저렴한 방식으로 애플리케이션을 구축, 제공 및 실행할 수 있습니다.

https://aws.amazon.com/ko/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를 설치해야 한다. 

 

https://brew.sh/index_ko

 

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 접속을 끊어줘야 한다(충돌 방지)

 

mac 시스템 환경설정에 들어가면 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

서버와 db 띄우기
로그 확인 하면

<주의사항>

 

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

 

반응형