도커 컴포즈
도커 파일로 이미지를 빌드할 수 있다면, 여러 도커 컨테이너를 하나의 서비스로 묶어 배포할 수 있는 기능이다.
컨테이너에서 사용할 네트워크 생성
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 |