본문 바로가기

카테고리 없음

docker-compose.yml 작성법

사이드프로젝트에서 mysql을 도커를 사용하여 올려서 DB 서버로 이용한다.

 

mysql 서버를 올릴 때 사용하는 docker-compose.yml 파일의 작성법에 대해 정리해 보려한다.

 

dockerfile과 docker-compose.yml의 차이점과 함께 docker-compose.yml의 작성법을 정리해보자

 

1. Dockerfile

- 목적

base Image 파일로 수정된 image를 만드는 일련의 과정들을 정리해 놓은 파일

docker는 이 dockerfile을 이용하여 손쉽게 동일한 이미지를 반복해서 만들 수 있다.

 

- 예시(문법)

# 베이스를 만들 이미지를 지정
FROM node:16

# 명령어들이 이루어질 기본 디렉토리 설정
WORKDIR /app

# 소스를 복사, 자주 바뀌는 소스일 수록 아래에 작성
COPY package.json package-lock.json /app
COPY index.html /app
COPY server.js /app

# 도커 컨테이너가 실행 되었을 때 리슨 포트지정
EXPOSE 80

# 도커 컨테이너가 실행되었을 때 실행하는 명령어
CMD ["node", "server.js"]

 

- 이미지 빌드 후 실행

docker build -t node-server ./

docker run -it -p 80:80 node-server

 

 

2. docker-compose.yml

- 목적 :  연결된 다수의 컨테이너를 하나로 통합하여 관리하는 도구

- docker-compose는 host level 에서만 동작한다.

- 컨테이너 실행 옵션을 미리 정의한 문서

- docker-compose.yml 파일에서 dockerfile에 정의된 이미지를 관리할 수도 있다.

 

- 예시로는 mysql을 docker로 올려서 사용하는 방법이다.

 

1) 우선 docker-compose.yml 파일 없이 그냥 도커를 다운받아서 mysql 이미지를 올리는 상황이다.

-> docker-compose.yml 파일 사용 안함!!

# 도커 mysql 이미지 다운로드
# 도커 Public registry(Docker Hub)에 있는 이미 만들어진 mysql 이미지를 다운받는다

docker pull mysql:8.0.17
# 다운받은 도커 이미지들 확인

docker images

다음처럼 그동안 받았던 이미지들의 리스트를 확인 할 수 있다.

처음 받는 경우라면 mysql 하나만 있을 것이다.

# 도커 mysql 컨테이너 생성 및 실행
# 호스트pc의 원하는 디렉토리를 mysql용 디렉토리로 마운트 시킨다
# docer mysql 같은 DB를 설치하는 경우 컨테이너 삭제와 함꼐 데이터도 날라간다
# -v 볼륨 옵션의 -v /c/data/mysql 가 호스트 pc에서 사용할 디렉토리이다.
# 한글 깨짐 방지를 위한 옵션도 마지막에 넣어준다

 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name mysql-test -v /c/data/mysql:/var/lib/mysql mysql:8.0.17 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

2) docker-compose.yml 파일 사용예시

 

전체적인 프로세스는 위와 같고, 이제 이렇게 매번 명령어를 그떄그때 치는 것 보다,

docker-compose.yml 파일을 생성하여 어디서도 동일한 환경으로 컨테이너를 올릴 수 있다.

 

같은 내용을 다른 방법으로 실행하는 것이라고 생각하면 된다.

 

- docker-compose.yml 작성 예시

services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  db: # 서비스 명
    image: mysql:8 # mysql 버전.
    restart: always
    container_name: mysql # 컨테이너 이름 설정
    ports:
      - "3305:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    environment: # -e 옵션
      MYSQL_ROOT_PASSWORD : "password_mysql"
      TZ : "Asia/Seoul"
    command: # 명령어 실행
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes: 
      - /c/data/mysql:/var/lib/mysql # -v 옵션 (다렉토리 마운트 설정 해당 폴더 생성 필요)

- 실행

# 모든 서비스 실행
docker-compose up

# 특정 서비스만 실행하고 싶다면
docker-compose run db(서비스명)

 

- 도커 클라이언트 프로그램에서도 잘 돌아가는걸 확인 할 수 있다.