[Docker-compose] 도커 컴포즈로 MySQL 컨테이너 배포

도커 컴포즈

도커 파일로 이미지를 빌드할 수 있다면, 여러 도커 컨테이너를 하나의 서비스로 묶어 배포할 수 있는 기능이다.

 

 

컨테이너에서 사용할 네트워크 생성

docker network create app-network

 

 

docker-compose 배포파일 설정

 

vi docker-compose-myapp.yaml

1 services:
  2   app-mysql:
  3     image: mysql:dev
  4     container_name: app-mysql
  5     environment:
  6       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  7     ports:
  8       - "3306:3306"
  9     volumes:
 10       - app-mysql-data:/var/lib/mysql
 11     restart: unless-stopped
 12     healthcheck:
 13       test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
 14       interval: 30s
 15       timeout: 10s
 16       retries: 5
 17     networks:
 18       - app-network
 19
 20 volumes:
 21   app-mysql-data:
 22     name: app-mysql-data
 23
 24 networks:
 25   app-network:
 26     name: app-network
 27     driver: bridge
 28     external: true

 

 

- 아래 링크에서 MySQL 이미지 및 배포 시 필요한 환경변수 등의 정보를 확인할 수 있다

이 중 "MYSQL_ROOT_PASSWORD" 의 대한 환경변수는 필수이며, MySQL 의 root 패스워드 초기화 패스워드이다.

 


 

Docker Hub

 

hub.docker.com

 

컨테이너 내 저장되는 데이터는 휘발성이므로, 컨테이너 삭제 시 사라지게 된다.

데이터베이스의 데이터는 삭제되지 않고 관리되어야 한다.

 

따라서 도커 컴포즈 파일 내 volume (app-mysql-data) 생성 후 mysql 의 기본 데이터저장 경로인 "/var/lib/mysql" 에 마운트

설정을 추가 하였다.

 

이제 도커 컨테이너가 삭제되더라도 MySQL 의 데이터는 도커 볼륨 (app-mysql-data) 에 남아있으며, MySQL 컨테이너는 실행 시 해당 볼륨을 마운트 후 데이터를 저장한다.

 

또한 "MYSQL_ROOT_PASSWORD" 환경변수로 패스워드 초기화는 기존의 데이터베이스가 구성되어 있다면,

해당 변수는 무시된다.

 

 

환경변수 파일 설정 (docker-compose 파일과 동일 위치)

 

vi .env

 

## MySQL
MYSQL_ROOT_PASSWORD=패스워드

 

 

도커 컴포즈로 서비스 배포

$ docker compose -f docker-compose-myapp.yaml up -d
[+] Running 1/1
 ✔ Container app-mysql  Started

 

 

컨테이너 실행 확인

$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS                        PORTS                                                    NAMES
1fadaf0c069a   mysql:dev   "docker-entrypoint.s…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   app-mysql

 

 

컨테이너 및 MySQL 접속

$ docker exec -it app-mysql bash
bash-5.1$ mysql -uroot -p

 

 

 

컨테이너로 설치한 MySQL 의 데이터 저장 경로는 "/var/lib/mysql" 이다. (volume 마운트 경로)

 

 

'Container > Docker' 카테고리의 다른 글

[Dockerfile] 도커파일로 MySQL 이미지 빌드  (3) 2025.08.30
Docker 컨테이너 실행하기  (2) 2025.03.28
Docker 설치하기 [Rocky 9.4]  (0) 2025.03.16