Docker, Kubernetes

·2022년 8월 25일
0

Docker

Docker의 개요

각각의 프로젝트는 Frontend, Backend, Database로 구성된다.
하나의 서버에서 하나의 서비스만 배포한다면 문제가 없지만, 여러 서비스를 동시에 배포하게 되면 서비스마다의 버전 불일치와 같은 문제가 생길 수 있다.

이를 해결하기 위해 가상환경을 이용해 분할하면서 효율성이 떨어지는 문제가 생긴다.

이러한 문제를 해결하는 방안이 Docker의 컨테이너이다.

컨테이너를 활용하면 가상환경이 아니라 컨테이너를 통해 분리되기 때문에 버전의 불일치로 인한 혼란을 막고, 가상환경으로 인한 효율성 저하도 막을 수 있다.

또, 배포 환경과 개발 환경의 불일치 문제 또한 컨테이너로 해결할 수 있다.

개발자는 각 컨테이너들이 어떻게 설계되고, 지정한 곳에 어떻게 설치가 되며 어떤 업무를 수행할지, 여러 컨테이너들이 어떻게 연결돼서 함께 서비스를 구성하며 동작할지 설계도(Dockerfile)에 명시해 둘 수 있다.

서버에서는 이 설계대로 컨테이너들을 설치해 동일하게 서비스를 실행할 수 있게 해준다.

Docker의 설치

  • https://www.docker.com/get-started
  • WSL 2 설치와 같은 추가 설정은 요구대로 수행한다.
  • 설치 후 CMD에서 docker --version 명령어를 통해 설치를 확인한다.

Docker 활용

  • docker run -it node를 통해 컨테이너를 만들거나 실행하고 컨테이너 내에서 CLI를 실행할 수 있다.

  • docker images를 통해 이미지를 확인할 수 있다.

    • 도커에서 이미지란, 컨테이너를 생성할 수 있는 틀을 말한다.
  • docker exec -it '컨테이너명' bash

    • 해당 컨테이너에서 bash shell을 실행한다.
    • 리눅스 가상환경에 진입.
  • docker ps

    • 도커에서 실행중인 컨테이너 목록을 확인한다.
    • -a를 뒤에 덧붙이면 실행중이 아닌 전체 목록을 확인한다.
  • Frontend Dockerfile(설계도)

    • RUN npm i -g http-server RUN 명령어는 이미지 생성 과정에서 실행할 명령어
    • WORKDIR /home/node/app WORKDIR : 이미지 내에서 명령어를 실행할 디렉토리
    • CMD ["http-server", "-p", "8080", "./public"] CMD : 컨테이너 실행 시 실행할 명령어
  • 이미지 생성 명령어 ( Dockerfile과 같은 디렉토리에서)

    • docker build -t {이미지명}
  • 컨테이너 생성 & 실행 명령어

    • docker run --name {컨테이너명} -v $(pwd):/home/node/app -p 8080:8080 {이미지명}
  • Database Dockerfile (설계도)

FROM mysql:5.7

# 이미지 환경변수 세팅
# 서버의 환경변수 등을 활용하세요

ENV MYSQL_USER '유저명'
ENV MYSQL_PASSWORD 'password'
ENV MYSQL_ROOT_PASSWORD 'root_password'
ENV MYSQL_DATABASE 'db명'

# 도커환경에서 컨테이너 생성시 스크립트를 실행하는 폴더로 미리 작성된 스크립트들을 이동
COPY ./scripts/ /docker-entrypoint-initdb.d/

# 이미지 빌드 명령어 (현 파일과 같은 디렉토리에서)
# docker build -t {이미지명}.

# 실행 명령어 (터미널에 로그 찍히는 것 보기)
# docker run --name {컨테이너명} -it -p 3306:3306 {이미지명}

# 실행 명령어 (데몬으로 실행)
# docker run --name {컨테이너명} -p 3306:3306 -d {이미지명}
  • docker-compose.yml
version: '3'
services:
  database:
    # Dockerfile이 있는 위치
    build: ./database
    # 내부에서 개방할 포트 : 외부에서 접근할 포트
    ports:
      - "3306:3306"
  backend:
    build: ./backend
    # 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
    volumes:
      - ./backend:/usr/src/app
    ports:
      - "5000:5000"
    # 환경변수 설정
    environment: 
      - DBHOST=database
  frontend:
    build: ./frontend
    # 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
    volumes:
      - ./frontend:/home/node/app
    ports:
      - "8080:8080"

해당 파일이 있는 경로에서 docker -compose up을 통해 통합실행.


Docker-Compose, Docker


Kubernetes

역할

  • 컨테이너를 관리하기 위한 툴
  • 컨테이너들의 모니터링을 실시
  • 컨테이너의 수가 많을 경우, 유용함
profile
SSAFY 7기

0개의 댓글