기존의 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에 올릴 수 있음
이미지 검색 : 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 Conainer를 2개 이상 실행 시키고 싶을땐??!
만약 WordPress (+Mysql)을 실행시키고 싶을려면?
- Mysql을 미리 Docker Image로 실행
- WordPress 링크 연결해서 실행
Docker Compose를 사용
Docker Compose란? 복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴
장점
- 1개 파일로 2개 이상의 container를 실행시킬 수 있다.
- yaml으로 구성되기 때문에 가독성이 편하다
- 연결되어 있는 프로그램 (wordPress)같이 mysql이 필요한 컨테이너와 연결이 가능하다.
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
flask
redis
# 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"]
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 파일 작성 (프로젝트 밑에 파일 생성)
- 변경이 필요한 부분은 빨간색으로 표시
docker compose파일이 들어있는 곳에서 실행 (터미널)
- docker-compose up
workbench로 DB Connection 생성
Localhost로 Docker Mysql 구성
AWS로 Docker Mysql 구성