티스토리 뷰

카테고리 없음

Dockerfile 작성해보기

Band Of Story 2024. 10. 17. 23:34

목차



    Docker Logo

    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

    이 명령어를 통해 실시간으로 로그를 확인할 수 있습니다.