티스토리 뷰
목차
Dockerfile 작성해보기: Apache 웹 서버와 MySQL 데이터베이스 컨테이너 설정 가이드
Dockerfile을 작성하고 Docker Compose를 사용하여 Apache 웹 서버와 MySQL 데이터베이스를 각각 Docker 컨테이너로 실행하는 방법을 단계별로 설명합니다. 이 가이드를 통해 Dockerfile 작성, 컨테이너 간 네트워크 연결, 그리고 두 서비스 간의 연동을 쉽게 설정할 수 있습니다.
1단계: 프로젝트 디렉토리 구조 생성
먼저, 프로젝트를 위한 디렉토리를 만들고 필요한 파일들을 준비합니다.
mkdir apache-mysql-docker
cd apache-mysql-docker
디렉토리 구조는 다음과 같습니다:
apache-mysql-docker/
│
├── Dockerfile # Apache 웹 서버용 Dockerfile
├── db/ # MySQL 데이터베이스 설정용 디렉토리
│ └── Dockerfile # MySQL Dockerfile
├── html/ # Apache 서버에 배포할 HTML 파일
│ └── index.html # 간단한 HTML 파일
└── docker-compose.yml # Docker Compose 파일
2단계: Apache용 Dockerfile 작성
Dockerfile을 프로젝트 루트 디렉토리에 작성합니다.
# Apache 기반 이미지 사용
FROM httpd:latest
# html 폴더의 내용을 Apache 웹 서버의 루트 디렉토리로 복사
COPY ./html/ /usr/local/apache2/htdocs/
이 설정은 최신 Apache 이미지를 사용하며, 로컬 디렉토리의 html 파일을 웹 서버의 루트 디렉토리로 복사합니다.
mkdir html
echo "<h1>Welcome to Apache Server with MySQL!</h1>" > html/index.html
위 명령어로 index.html 파일을 생성하여 웹 페이지의 기본 콘텐츠를 설정합니다.
3단계: MySQL용 Dockerfile 작성
다음으로 MySQL을 위한 Dockerfile을 작성합니다. db 디렉토리를 만들고 그 안에 Dockerfile을 생성합니다.
mkdir db
cd db
# MySQL 공식 이미지 사용
FROM mysql:latest
# MySQL 설정
ENV MYSQL_ROOT_PASSWORD=root_password
ENV MYSQL_DATABASE=mydb
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=myuser_password
이 파일은 MySQL 컨테이너가 실행될 때 기본 데이터베이스와 유저를 설정하도록 구성합니다.
4단계: Docker Compose 파일 작성
docker-compose.yml 파일을 프로젝트 루트 디렉토리에 생성하여 Apache와 MySQL을 함께 실행하고 네트워크 연결을 설정합니다.
version: '3'
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
networks:
- webnet
db:
build: ./db
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: myuser_password
ports:
- "3306:3306"
networks:
- webnet
networks:
webnet:
이 설정은 웹과 데이터베이스 서비스가 서로 통신할 수 있도록 네트워크를 정의하며, 각 컨테이너의 포트를 호스트에 연결합니다.
5단계: Docker Compose로 컨테이너 실행
아래 명령어로 두 컨테이너를 빌드하고 실행합니다.
docker-compose up --build
이 명령어는 docker-compose.yml 파일을 기반으로 Apache와 MySQL 컨테이너를 빌드하고 실행합니다.
6단계: 실행된 컨테이너 확인 및 테스트
실행 중인 컨테이너 목록을 확인하려면 아래 명령어를 사용합니다:
docker-compose ps
웹 브라우저에서 <http://localhost:8080에> 접속해 Apache 서버가 제대로 실행되었는지 확인하세요. 페이지가 정상적으로 표시된다면, 컨테이너가 성공적으로 실행된 것입니다.
7단계: 컨테이너 간 통신 테스트
Apache 컨테이너에서 MySQL과 연결하려면 아래 명령어로 컨테이너에 접속합니다.
docker exec -it apache-mysql-docker_web_1 /bin/bash
그런 다음 MySQL 클라이언트를 설치하여 데이터베이스와 통신할 수 있습니다.
apt-get update && apt-get install -y default-mysql-client
mysql -h db -u myuser -pmyuser_password mydb
정상적으로 연결되면 MySQL 데이터베이스에 접속하여 쿼리를 실행할 수 있습니다.
8단계: 컨테이너 중지 및 삭제
실행 중인 모든 컨테이너를 중지하고 리소스를 정리하려면 다음 명령어를 사용합니다:
docker-compose down
9단계: 추가 Docker Compose 명령어 실습
- 백그라운드 실행:
docker-compose up -d
- 실행 중인 컨테이너 로그 확인:
docker-compose logs -f
이 명령어를 통해 실시간으로 로그를 확인할 수 있습니다.