본문 바로가기
DOCKER

[Docker]docker compose로 apache, tomcat, mysql 한번에 실행시키기

by 미눅스[멘토] 2026. 4. 22.
728x90

실행할 경로에 

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