rueki

docker compose 실행해보기 본문

쿠버네티스, 도커

docker compose 실행해보기

륵기 2021. 11. 22. 18:30
728x90
반응형

도커 컴포즈

: 여러 컨테이너를 일괄적으로 정의 및 실행할 수 있는 툴

  컨테이너화 된 애플리케이션들을 통합 관리가 가능함.

 

yaml 파일 생성을 통해 전달해주게 된다.

version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

위의 코드는 docker docs의 sample yaml 파일 일부이다. 이것을 이전까지 써온 명령어로 풀어쓰면 아래와 같다.

docker run --name db -v db_data:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD:somewordpress

 

yaml 기본 문법 설명

version : compose 버전

services : 컴포즈를 이용해서 실행할 컨테이너 옵션 정의

build : 컨테이너 빌드

image : compose 통해 실행할 이미지 지정

command : 컨테이너에서 실행될 명령어 지정

port : 컨테이너가 공개하는 포트를 나열

link : 다른 컨테이너와 연결할 때 컨테이너 지정

expose :  포트를 링크로 연계된 컨테이너에게만 공개할 포트

volumes : 컨테이너에 볼륨 마운트

environment : 환경변수 설정

restart : 컨테이너가 종료될 때 적용할 정책

           - always : 컨테이너를 수동으로 끄기 전까지 항상 재시작

           - on-failure : 오류가 있을 시 재시작

 

* Docker compose로 빌드 및 배포 절차

- 서비스 디렉토리 생성

- 빌드를 위한 dockerfile 생성하기

- docker compose.yaml 생성

- docker-compose 명령어

 


Docker compose 설치 (튜토리얼 내용 정리)

https://docs.docker.com/compose/install/

 

Install Docker Compose

 

docs.docker.com

 

1. 작업 디렉토리 생성

 mkdir composetest
 cd composetest

2. Dockerfile 생성, python 예제파일

# 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"]
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 에 파이썬 라이브러리 설치할 것들 명시하기.

- 도커 컴포즈로 실행한 파일 종료 및 삭제

  중지만 시키려면 stop 사용

docker-compose down

- 위에서 만든 도커 컴포즈 수정 (volume 마운트 경로 설정)

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

MYsql DB를 사용하는 wordpress 운영하기

1. 프로젝트 폴더 생성

2. yaml 파일 작성

version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

3. docker compose 실행하기 (백그라운드에서 생성)

docker-compose up -d
728x90
반응형

'쿠버네티스, 도커' 카테고리의 다른 글

docker 컨테이너 자동 삭제  (0) 2021.12.27
Dockerfile Example  (0) 2021.12.20
도커 컨테이너 통신  (0) 2021.11.21
도커 컨테이너 Storage  (0) 2021.11.19
Kubernetes namespace  (0) 2021.11.19
Comments