실행할 경로에
compose.yml
version: '3.8'
services:
# MySQL 서비스: 데이터 영구 보존 설정 포함
db:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- ./mysql_data:/var/lib/mysql #호스트의 ./mysql_data 폴더와 컨테이너의 DB 저장 경로를 연결
ports:
- "9306:3306"
# Tomcat 9 서비스 (AJP 포트 8009 오픈 필요)
tomcat:
image: tomcat:9.0-jdk8-openjdk
container_name: tomcat_app
restart: always
ports:
- "9080:8080" #디버깅용 나중에 주석처리
# 실행 시 자동으로 webapps.dist의 내용을 webapps로 복사한 뒤 톰캣 실행
command: /bin/bash -c "cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ && catalina.sh run"
depends_on:
- db
# Apache 서비스 (mod_jk 설정 포함)
apache:
image: httpd:2.4
container_name: apache_server
restart: always
ports:
- "80:80"
depends_on:
- tomcat
내 기준 compose.yml 파일을 D:\MinwooTool\practice\docker 경로에 넣어놨다
docker compose up명령어를 시키려면 반드시 해당경로에 compose.yml파일이 있어야 한다.
#프론트에서 실행
PS D:\MinwooTool\practice\docker> docker compose up
#백그라운에서 실행
PS D:\MinwooTool\practice\docker> docker compose up -d
이후 확인해보면
MySQL

Apache

Tomcat

이렇게 톰켓에서만 페이지를 찾을 수 없다고 나오는데
최신 도커용 톰캣 이미지는 보안을 위해 배포용 파일(webapps)을 비워두고, 샘플 페이지들을 webapps.dist라는 별도의 폴더에 격리해 두어서 그렇다.
- webapps: 실제 서비스가 돌아가는 폴더 (현재 비어 있음 → 404 발생)
- webapps.dist: 고양이 화면 등 기본 샘플이 들어있는 폴더
그래서 일단 보기 좋게 webapps.dist폴더에 있는 파일을 webapps로 옮겨 확인해보자
docker exec -it tomcat_app cp -r webapps.dist/. webapps/
다시 9080으로 확인해보면

잘 나온것을 확인할 수 있다
이 과정이 번거롭게 느껴진다면
실행할때 자동으로 복사되도록 command 를 추가해보자
# Tomcat 9 서비스 (AJP 포트 8009 오픈 필요)
tomcat:
image: tomcat:9.0-jdk8-openjdk
container_name: tomcat_app
restart: always
ports:
- "9080:8080" #디버깅용 나중에 주석처리
# 실행 시 자동으로 webapps.dist의 내용을 webapps로 복사한 뒤 톰캣 실행
command: /bin/bash -c "cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ && catalina.sh run"
depends_on:
- db
프로세스 종료
docker compose down
재시작
#프론트 실행
docker compose up
#백그라운드 실행
docker compose up -d
확인해보면 처음부터 잘 나오는것을 볼 수 있다
마지막으로 db에 columes를 설정하면 초기 설정한 비밀번호가 유지되어 오류속에서 시간을 보내기 바쁠 수 있으니 초기설정을 꼭 기억해 두거나 아래 글을 참고하자
https://deahan.tistory.com/450
[비전공자의 Docker ] Volume을 이용한 MySQL 실행시켜보기
https://deahan.tistory.com/448위 링크처럼 그냥 mysql을 생성해서 실행중인 컨테이너를 삭제하면 안에 데이터가 모두 날라가게 되는데이것을 방지하기위해 저장공간을 호스트와 공유하여 컨테이너가
deahan.tistory.com
'DOCKER' 카테고리의 다른 글
| [Docker]compose.yml + Dockerfile을 이용해 apache, tomcat, mysql 한번에 실행시키기 (0) | 2026.04.22 |
|---|---|
| [Docker] Docker CLI <=> Docker Compose 변환 사이트 (0) | 2024.12.16 |
| [비전공자의 Docker ] Docker Compose로 Spring Boot실행 (0) | 2024.12.16 |
| [비전공자의 Docker ] Docker Compose로 MYSQL실행 (1) | 2024.12.16 |
| [비전공자의 Docker ] Docker Compose (도커컴포즈) (0) | 2024.12.12 |