기술 스택 - Docker

zio도미닉·2021년 11월 29일
0

Docker란?

  • 도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트

  • 기존의 VM을 이용한 방버은 별도의 OS를 설치하고 APP을 설치하는 방법 -> 컴퓨터(서버)의 공간 낭비 및 자원 낭비가 심함

  • 기존의 가상화 방식은 OS를 가상화, Dockder

  • Docker를 이용하면 하나의 OS위에서 APP을 실행할 수 있는 딱 규격의 맞는 Container(공간)만 제공하기 효율적으로 APP 실행이 가능

  • Docker 실행 순서 및 용어 정리

  • Docker File 작성 후 Build → Docker File 생성 (Docker Image)
  • docker pull로 docker Image를 가져올수 있고
  • docker run으로 docker container 실행
  • docker push로 docker image를 docker에 올릴 수 있음

Container 실행하기 (미리 만들어져 있는 Docker Image 실행)

이미지 검색 : docker search App

  • docker search mysql # mysql image 검색 결과 출력

  • docker pull mysql # 이미지 다운로드

  • docker images # 이미지 확인

  • 이미지 run (컨테이너 실행)
    docker run --name mysql-container -d -p 1104:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:latestmysql:latest
    - 추가 설명 : mysql-container (컨테이너 이름)
    - 1104는 외부에서 접속할 포트, 뒤에 포트는 내부 포트
    - 즉 workbench 등의 외부 프로그램에서 접속할때는 임의 포트를 지정하고 내부포트는 mysql이 쓰는 포트로 지정한다.

  • 컨테이너 확인
    docker ps (현재 실행되고 있는 컨테이너 확인)
    docker ps -a (지금까지 실행되었던 모든 컨테이너 확인)

  • 컨테이너 종료
    docker rm ContainerID

Docker Compose

  • 만약 Docker Conainer를 2개 이상 실행 시키고 싶을땐??!

  • 만약 WordPress (+Mysql)을 실행시키고 싶을려면?
    - Mysql을 미리 Docker Image로 실행
    - WordPress 링크 연결해서 실행

  • Docker Compose를 사용

  • Docker Compose란? 복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴

  • 장점
    - 1개 파일로 2개 이상의 container를 실행시킬 수 있다.
    - yaml으로 구성되기 때문에 가독성이 편하다
    - 연결되어 있는 프로그램 (wordPress)같이 mysql이 필요한 컨테이너와 연결이 가능하다.

Docker Compose로 web, redis 실행

  • composeTest 폴더 생성
  • app.py 생성
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count
  • requirements.txt 파일 생성
flask
redis
  • Dockerfile 생성
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  • docker-compse.yml 생성
version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
  • 터미널 실행
    docker-compose up

  • 추가 설명 : web, redis가 서비스 실행
    - 하지만 docker를 만들기 위해서는 docker image가 필요한데 redis만 정의
    - web docker build 현재 위치를 기점으로 dockerfile을 사용함


Docker Compose로 mysql 실행환경 구성하기

  • docker-compose 파일 작성 (프로젝트 밑에 파일 생성)

    - 변경이 필요한 부분은 빨간색으로 표시

  • docker compose파일이 들어있는 곳에서 실행 (터미널)
    - docker-compose up

  • workbench로 DB Connection 생성

  • Localhost로 Docker Mysql 구성

  • AWS로 Docker Mysql 구성

TO DO

  • Docker 명령어, DockerFIle 명령어 등

Reference

profile
BackEnd Developer

0개의 댓글