본문 바로가기
Docker/이론

[Docker] 10. Docker-Compose (from build to operation)

by Haengsin 2021. 11. 18.

Docker-Compose

  • 여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
    • 하나의 서비스를 운영하기 위해서는 여러 개의 애플리케이션이 동작해야 함
    • 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음

 

 

 

Docker-Compose로 컨테이너 실행

예를 들어, docker hub에 올라가 있는 wordpress의 경우 아래와 같이 yaml 파일이 구성되어 있다.

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

버전마다 추가되거나 삭제된 문법의 차이가 있기 때문에, 사용하고자 하는 서비스가 있고 yaml 파일을 편집할 떄 version에 따른 문법을 확인하고 진행해야 한다.

 

Docker-Compose 로 Container 실행

1. 직접 Dockerfile 로 빌드하지 않고 진행

(1) 서비스 디렉토리 생성

mkdir webserver
cd webserver

(2) docker-compose.yml 생성

cat > docker-compose.yml

#docker-compose.yml
version: '3.1'

services:

 web:
  image: httpd:latest
  ports:
   - "80:80"
  links:
   - mysql:db
  command: apachectl -DFOREGROUND

 mysql:
  image: mysql:latest
  command: mysqld
  environment:
   MYSQL_ROOT_PASSWORD: pass

(3) docker-compose 명령어

docker-compose up -d
docker-compose ps
docker-compose scale mysql=2
docker-compose ps
docker-compose down

 

 

2. 직접 Dockerfile 를 생성하고 빌드하여 진행

(1) 서비스 디렉토리 생성

mkdir webserver2
cd webserver2

(2) 빌드를 위한 dockerfile 생성

$ cat > dockerfile

# dockerfile
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"]

(3) docker-compose.yml 생성

cat > docker-compose.yml

#docker-compose.yml
version: "3"

services:

 web:
  build:
  ports:
   - "5000:5000"
   
 redis:
  image: "redis:alpine"

(3) docker-compose 명령어

docker-compose up -d
docker-compose ps
docker-compose scale mysql=2
docker-compose ps
docker-compose down

 

'Docker > 이론' 카테고리의 다른 글

Docker-Compose 설치  (0) 2021.11.18
[Docker] 8.Container Storage  (0) 2021.09.23
[Docker] 7.Container 리소스 관리  (0) 2021.09.07
[Docker] 5.Container 운영  (0) 2021.08.24
[Docker] 4.Container Registry  (0) 2021.08.12