Docker-compose
- 여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
- 하나의 서비스를 운영하기 위해서는 여러 개의 application이 동작해야 한다.
- 컨테이너화 된 application 들을 통합 관리할 수 있다.
- docker-compose의 문법에 맞춰서 yaml 파일을 만들어서 컨테이너를 실행시킨다.
yaml 파일 작성 문법
- version : compose 버전(버전마다 지원 문법 다름)
- services : compose 이용해서 실행할 컨테이너 옵션 정의
e.g.
service:
webserver:(컨테이너)
(세부 정보들)
bulild : .
image:nginx
volumes:
- db_data:/var/lib/mysql
command : sh -c "yarn-install && yarn un dev"
port:
- "80:80"
depends_on:
- db
db:(컨테이너)
image:redis
link:
db:mysql
enviorment:
MYSQL_ROOT_PASSWORD : mysql
- build : 컨테이너 빌드할 때
- imgae : compose를 통해 실행할 이미지를 지정
- command : 컨테이너 실행할 때 실행될 명령어 지정
- volume : volume mount
- port : 컨테이너가 열고 있는 port 지정
- link : 다른 컨테이너와 연계할 때 연계할 컨테이너 지정
- expose : 포트를 링크로 연결된 컨테이너에게만 공개
- enviroment : 컨테이너에 적용할 환경변수 정의
- restart : 컨테이너가 종료될 때 적용할 restart 정책
- depends_on : 컨테이너 간의 종속성을 정의. 정의한 컨테이너가 먼저 동작되어야 한다.
docker-compose 동작 순서
- 서비스 디렉토리 생성
- mkdir webserber -> cd webserver
- 빌드를 위한 dockerfile 생성
- docker-compose.yml 생성
- docker-compose 명령어
- docker-compose config : compose 파일 문법 체크
- docker-compose up -d : docker-compose.yml을 기준으로 백그라운드 모드로 컨테이너 생성/실행
- docker-compose 있는 디렉토리에서 동작중인 container 상태
- docker-compose scale mysql=2 : scale in, scale out 가능
- docker-compose down : 컨테이너 종료
docker-compose 설치
- docker docs에서 install docker-compose 검색후 linux에 docker-compose 설치 가이드대로 진행
docker-compose 사용해보기
실행 파일 작성
$ mkdir composetest
$ cd composetest
$ vi 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 파일 작성 : 컨테이너에서 실행 파일이 동작할 때 필요한 라이브러리 설치하기 위해서
$ vi requirements.txt
redis
flask
Dockerfile 작성
$ vi 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"]
compose 파일 작성
vi compose.yml
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
build 하고 실행
가상 머신으로 docker container를 띄운 상태여서 포트포워딩 후 접속
docker-compose 파일 수정해서 local에서 변경하면 바로 container에 적용되도록 volume mount
vi docker-compose.yml
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"
'Infra' 카테고리의 다른 글
UTM 이용해서 쿠버네티스 환경 구성하기 (0) | 2024.12.04 |
---|---|
AWS IAM 계정 공유 와 AWS 서비스에 IAM 역할 적용 (0) | 2024.12.04 |
컨테이너 관리하기 (0) | 2024.12.04 |
컨테이너 다루기 (0) | 2024.12.04 |
가상화 다루기 (0) | 2024.12.04 |