본문 바로가기

Container

Docker Compose

Docker를 설치하면 docker-compose 라는게 같이 설치가 되는데 (Mac기준)

처음에 몇가지 세팅만 해두면 더 편하게 Docker를 사용할 수 있다.

 

현재 일할때 mysql 2대, redis 1대를 사용하는데 로컬에 세팅한 예제로 세팅을 해보겠다.

 

1. Dockerfile

docker를 사용할때 Dockerfile이란 이름으로 docker 세팅을 하는데 docker-compose도 이 파일에 작성된 내용으로 설정을 불러 올 수 있다.

 

2. docker-compose.yml

docker-compose를 실행할때 필요한 설정 파일이다. 이 파일이 있는곳에서 실행해야 docker-compose를 사용할 수 있다.

 

3. mysql 예제

3-1. 디렉토리 구조 이해

 

docker compose 예제 디렉토리

mysql의 경우 DML 및 DDL이 필요할 수 있다.

최초 mysql 컨테이너 실행시 테이블 생성 및 환경변수 insert가 필요할 수 있다.

예제 기준으로 config와 sql파일을 별도 디렉토리로 분리해서 설정해 놓았다.

sql디렉토리안에 실행시킬 sql파일을 넣으면 된다.

 

3-2. Dockerfile 작성

fileName: Dockerfile-example

# Dockerfile-example
# Dockerfile은 확장자가 없다.
# 가져올 mysql 버전 작성
FROM mysql:5.7
# 유지하는 사람 정보.. 특별히 쓸대는 없다.
MAINTAINER heron.lee
# mysql 세팅 및 최초 실행시 실행할 스크립트 파일 경로 세팅
# sql 실행은 알파벳 순서로 실행 됩니다. 스크립트 실행 순서를 조절 할 수 있습니다.
COPY config/mysql/my.cnf /etc/mysql/
COPY sql/*.sql /docker-entrypoint-initdb.d/

COPY부분만 설명하면 왼쪽이 내 local경로 우측이 docker경로이다.

sql파일의 경우 docker-entrypoint-initdb.d/ 아래에 위치하면 이미지가 생성하고 mysql을 실행시킬때

sql구문을 실행한다. (단, 제 경험으로는 최초 이미지 생성시에만 실행되었음)

 

3-3. docker-compose.yml 작성

fileName: docker-compose.yml

version: '3.3'

services:
  # service 명
  mysql-example:
    # Dockerfile를 읽어올 경로 작성
    build:
      context: .
      dockerfile: Dockerfile-example
    container_name: mysql-container
    # 이미지명 서버에 push or link를 할때 이 이미지명을 사용한다.
    image: custom-mysql-container:1.0
    environment:
      MYSQL_ROOT_HOST: '%'
      MYSQL_DATABASE: 'example-db'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    ports:
      - '10126:3306'
    volumes:
      - ./volumes/mysql-example:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
  redis:
    container_name: redis
    image: redis:4.0.11-alpine
    ports:
      - '6379:6379'

version은 docker-compose 버전 작성 (내가 관리할 버전이 아님!!)

mysql의 경우 로그인 정보를 설정하기 싫으면 environment 값을 보면 됨.

ports는 내 local포트와  docker container에 매핑시킬 포트를 작성하면 된다. (왼쪽이 local, 우측이 docker port)

volumes는 컴퓨터를 껏다 킬 경우 docker도 꺼지기 때문에 데이터를 저장 시킬 공간.

아래보면 redis라는게 있는데 docker-compose.yml에는 여러개의 이미지를 한번에 실행 시킬 수 있다는걸 보여주기 위해서 간단히 넣었다.

 

3-4. docker-compose 실행

docker-compose up -d

docker-compose.yml 경로에서 위와 같이 명령어를 실행하면 docker가 실행하면서 mysql 및 redis 가 실행 된다.

 

마무리.

위 설정은 local환경에서 실행될 환경이기 때문에, 실제 운영환경에서는 더 많은 설정값이 필요할 수 있다.

docker-compose 관련해서 검색을 하면 더 많은 정보를 찾아 볼 수 있을 것이다.

'Container' 카테고리의 다른 글

Docker 기초 명령어  (0) 2019.12.14
Mac - Docker 설치  (0) 2019.12.14