AWS - Docker, nginx, NginxProxyManager

Tadap·2023년 7월 28일
0

AWS 학교

목록 보기
3/5

Git

깃은 다 알고있는 내용이었다. 아마 여기서는 간단하게 commit 정도만 하면 되어서 그런것 같다.
Git은 초기버전부터 앞으로의 내용의 변화 만을 기록한다. 그러면 보든 버전에 모든 파일을 저장하지 않아도 된다.
learngitbranching.js.org 란 사이트에서 git을 간단하게 배워 볼 수 있었다.

VirtualBox - Linux

CentOS를 virtualBox에 설치 한 후 실습을 진행하였다. (설치과정은 중요치 않으니 패스)
윈도우 사용자는 WSL이나 Hyper-v를 이용해도 될 것 같다.

SSH

먼저 SSH로 설치한 OS에 진입하였다
SSH - SecureShell로 암호화를 이용하여 원격 접속하기 위해 사용한다.
현재는 hostOS에서 guestOS에 연결하기 위해 사용한다.
접속 명령어는 ssh -p 포트번호 계정명@주소 로 이루어져있다.
개인적으로는 temius 라는 프로그램을 선호한다.(시인성이 좋음)

패키지 관리자 - yum, dnf

페도라 계열의 패키지 관리자는 yum이 있는건 알고 있었다.
항상 데비안 우분투 계열만 사용했기 때문에 몰랐는데 dnf라는 최신 패키지 관리자가 있다.
apt 사용하는것 처럼 사용하면 된다.
dnf install nginx

nginx

nginx는 서버 소프트웨어로 리버스프록시, 로드 밸런싱, SSL/TLS지원 등 다양한 기능을 제공한다.
SSL/TLS만 사용해 봤었다.
먼저 리눅스에 설치 이후 사용해 접속해봤다.
접속시 CentOS는 우분투의 ufw처럼 firewalld 라는 방화벽 프로그램을 가지고 있다.
여기서는 편의를 위해 작동을 중지시켰다.
sudo firewall-cmd --zone=public --add-port=포트번호/tcp --permanent 를 이용하여 특정 포트를 허용 할 수 있다고 한다.

Docker

도커는 컨테이너 기반의 가상화 플랫폼이다.
과거에는 항상 가상머신을 이용하여 작동을 시켰다고 하는데 이는 가상화와 guestOS 설치를 해야 했고 이에 따라 오버헤드가 발생하는데 이를 해결한 방법이다.
우리가 아는 그 컨테이너는 배에 비하면 매우 작은 크기이다. 그런식으로 프로그램을 컨테이너에 담아(담을때 프로그램과 관련 종속성도 포함하여) 배포, 실행을 한다. 따라서 개발과 배포를 효율적으로 가능하게 하고 오버헤드가 적게 호스트 자원을 효율적으로 공유하여 사용할 수 있다.
추후 Jenkins를 사용하여 CI/CD 파이프 라인 구축시에도 사용한다.
유명한 프로그램들은 이미 DockerHub에 올라와있고 이를 docker pull해서 이미지를 가져와 실행시킬 수 있다.

  • docker rmi ~ 를 통해 이미지를 삭제할 수 있다.
  • docker ps를 통해 실행중인 프로세스들을 확인 가능하며 -a옵션을 붙여 중지된 프로세스들도 확인 가능하다
  • docker rm 컨테이너ID를 통해 삭제 가능하며 ID는 4글자정도만 쳐도 인식한다. 강제종료 옵션은 -f가 있다.
  • docker exec -it 컨테이너ID를 통해 특정 컨테이너의 shell에 접근할 수 있다. bash쉘의 경우 뒤에 bash를 붙여야 한다
  • docker run --name=컨테이너_이름 -p 80(외부):80(컨테이너내부) -v 호스트와_마운트,외부:내부 -d --restart="value" imagefile
    - 위 명령어를 차례로 확인
    --name 은 컨테이너 이름을 자동생성이아닌 수동생성한다. 겹치는것이 불가능하다
    -p는 포트번호로 컨테이너 내부와 외부를 연결한다.
    -v는 불륨 연결로 정하면 호스트의 특정 폴더와 연결된다. 이를통해 컨테이너삭제 여부와 관계없이 데이터를 보관하거나, 컨테이너에게 특정 파일을 제공 할 수 있다
    -d는 데몬 실행 옵션이다.
    --restart는 재시작 정책이다 여러가지가 있는데 always는 항상, on-failure은 지정된 횟수만큼만 시도, no는 종료 등등이 있다.

나머지는 추후 정리하는걸로 한다.

이미지 생성

도커 이미지는 직접 생산도 가능하다.

# 베이스 이미지로 Node.js 이미지를 사용합니다.
FROM node:14

# 애플리케이션 소스 코드가 들어있는 폴더를 생성하고, 이동합니다.
WORKDIR /usr/src/app

# 호스트의 package.json과 package-lock.json 파일을 컨테이너 내부로 복사합니다.
COPY package*.json ./

# 애플리케이션에 필요한 패키지들을 설치합니다.
RUN npm install

# 호스트의 모든 파일들을 컨테이너 내부의 /usr/src/app 폴더로 복사합니다.
COPY . .

# 컨테이너를 실행할 때 사용할 명령어를 지정합니다.
CMD ["node", "app.js"]

위는 nodejs 14버전을 베이스로 만든 컨테이너다.

docker-compose

도커를 실행하는 다른 방법이다.

version: '3.8'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: mysecretpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: myuserpassword
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql

이런식으로 작성하면 된다. 이후 docker-compose up 하여 실행하면 실행된다
종료는 up의 반대인 down 이다.

NginXProxyManager

여기서는 이를 이용하여 NignXProxyManager를 실행시켰다.

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      TZ: "Asia/Seoul"
      DB_MYSQL_HOST: "172.17.0.1"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "lldjlocal"
      DB_MYSQL_PASSWORD: "1234"
      DB_MYSQL_NAME: "nginx"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  • image는 생성에 필요한 이미지이다
  • restart는 재시작 옵션이다 현재는 비정상적 종료일때만 재시작 한다
  • ports는 포트 연결이다 80-80은 HTTP, 443-443은 HTTPS, 81-81은 NginxProxyManager 인터페이스 접속을 위해 연결하였다.
  • environment는 환경변수로 도커내부 ProxyManager 환경변수이다.
    • DB에다가 유저 관련 정보를 넣는데 이와 관련된 환경변수이다. nginx라는 테이블에 연결한다.
  • volume은 -v와 같은 옵션이다.

0개의 댓글

관련 채용 정보