기주

[docker] docker compose 로 mysql 서버 띄우기 본문

devops/docker

[docker] docker compose 로 mysql 서버 띄우기

기주그지마 2024. 12. 7. 14:07

docker compose 로 mysql 서버 띄우기

 

Docker Compose

여러개의 컨테이너를 하나의 서비스로 정의하고 하나의 묶음으로  관리할 수 있게 해주는 툴

 

도커 컴포즈를 사용하는 이유

1. 여러개의 컨테이너를 관리하는데 용이하다

여러개의 컨테이너로 이루어진 어플리케이션을 한번에 관리할 수 있다. 여러 컨테이너를 하나의 환경에서 실행하고 관리하는데 도움이된다.


2. 복잡한 명령어로 실행시키던것을 간소화할 수 있다.

이전에 mySQL 이미지를 컨테이너로 실행시킬 쓰던 명령어.

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 
-v /Users/kiju/dev/study_data/docker-volume/mysql_data:/var/lib/mysql -d mysql


이는 너무 복잡하다.  도커 컴포즈를 쓰면

Docker compose up

명령어 하나로 compose.yml에 적힌 모든 컨테이너를 생성한다.

 

 

 

도커컴포즈 활용하기

1. compose.yml 파일 작성하기

services:
  My-web-server:
    contaienr_name: webserver
    image: nginx
    ports:
      - 80:80
services: my-web-server // 도커 컴포즈에서 하나의 컨테이너는 하나의 서비스라고 부른다. 서비스의 이름설정
container_name: webserver // 컨테이너를 띄울때 붙이는 이름. docker cli 에서 --name 과 같다
image: 컨테이너에 사용되는 이미지
port: 호스트 컴퓨터의 포트와 컨테이너의 포트를 매핑

 

 

2. compose 파일 실행

compose.yml에 적힌 컨테이너생성 (docker comopse create + start)

Docker compose up -d
// 옵션
-d : 백그라운드 실행
--build: 이미지없다면 빌드



3. 컴포즈 실행 현황보기

docker compose ps
docker ps



4. 도커 컴포즈 내리기

compose.yml에 적힌 컨테이너 모두 삭제

Docker compose down
옵션
-v: 연결된 볼륨도 모두 삭제



컨테이너를 중지만 하고싶다면

docker compose stop

 

그외 쓰이는  docker compose 명령어)

 

docker compose에 정의된 컨테이너 목록보기

// compose.yml에 정의된 실행중인 컨테이너 목록 보기
Docker compose ps

// compose.yml에 정의된 모든 컨테이너 목록 보기
Docker compose ps -a



compose.yml에 정의된 컨테이너들의 로그보기

Docker compose logs

 

 

 

도커 컴포즈 이미지 빌드

Compose.yml에서 정의한 이미지 파일에서 코드가 변경되었을때, 이미지를 재빌드해서 컨테이너를 실행시켜야 변경사항이 적용된다.

이때 필요한 옵션이다.

// 이미지가 없을 때만 빌드해서 컨테이너를 실행시킨다. 이미지가 이미 존재하는 경우 이미지를 빌드하지 않고 컨테이너를 실행시킨다.
docker compose up 

// 이미지가 있건 없건 무조건 빌드를 다시해서 컨테이너를 실행시킨다.
docker compose up --build




이미지 다운받기 / 업데이트하기

Docker compose pull
로컬에 이미지가 없다면 이미지 다운.

로컬환경에 이미지가 있지만, 도커허브의 이미지와 다른 경우 업데이트한다.








docker compose 이용해서 mysql 서버 띄우기

기존의 복잡하고 긴 docker CLI 명령어때문에  컨테이너가 1개일때도 docker compose를 이용하기도 한다.

 

compose.yml

services:
  mysql-server:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: password123
    volumes:
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3306:3306
environment: CLI에서 -e 옵션과 동일
volumes: CLI에서 -v 옵션과 동일

 

 

기존 도커 CLI 코드

$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 
-v ./mysql_data:/var/lib/mysql -d mysql

 

 

도커 컴포즈 실행

docker compose up -d

 

 

 

 

 

이처럼 docker CLI는 compose.yml로 대응이 서로 가능하다. 그 반대도 가능하다.

이를 변환해주는 사이트도 있다.

 

docker CLI -> compose.yml 

https://www.composerize.com/

 

 

compose.yml -> docker CLI

https://www.decomposerize.com/