IMCAT.DEV
로그인 가입
PHP 고급 DevOps

PHP 컨테이너와 Docker 사용법

PHP 컨테이너와 Docker 사용법 — 고급

컨테이너와 Docker 사용법

1. 도입 (왜 배워야 하는가)

현대 소프트웨어 개발 환경에서는 애플리케이션의 배포와 관리가 점점 더 복잡해지고 있습니다. 다양한 운영 체제, 라이브러리 및 프레임워크의 버전 차이로 인해 개발 환경과 운영 환경의 불일치 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 컨테이너와 Docker는 필수적인 도구가 되었습니다.

Docker를 사용하면 애플리케이션과 그 의존성을 패키징하여 일관된 실행 환경을 제공할 수 있습니다. 이를 통해 "내 컴퓨터에서는 잘 되는데..."라는 문제를 예방할 수 있습니다. 따라서 Docker를 배우는 것은 개발자의 필수적인 스킬로 자리 잡고 있습니다.

2. 핵심 개념 설명

컨테이너

컨테이너는 소프트웨어를 실행하기 위한 경량화된 격리 환경입니다. 이를 실생활 비유로 설명하자면, 컨테이너는 마치 각기 다른 음식 재료를 담은 밀폐 용기와 같습니다. 각 용기는 서로 다른 재료를 포함하고 있지만, 독립적으로 보관되고 조리할 수 있습니다.

Docker

Docker는 컨테이너를 관리하고 배포하는 플랫폼입니다. 비유하자면, Docker는 음식 재료를 보관하고 조리할 수 있는 주방의 역할을 합니다. 주방이 효율적으로 조리할 수 있도록 도와주고, 다양한 요리를 쉽게 만들 수 있도록 해줍니다.

용어정의
이미지컨테이너를 생성하기 위한 템플릿
컨테이너이미지에서 실행되는 독립적인 실행 환경
Dockerfile컨테이너 이미지를 생성하기 위한 설정 파일

3. 기본 코드 예제

Docker를 사용하여 간단한 PHP 웹 애플리케이션을 컨테이너로 실행해보겠습니다.

  1. 먼저 Dockerfile을 작성합니다.
  2. # PHP 이미지 사용
    FROM php:7.4-apache
    
    # 애플리케이션 코드 복사
    COPY src/ /var/www/html/
    
    # 포트 설정
    EXPOSE 80
  3. src/index.php 파일을 작성합니다.
  4. <?php
    echo "안녕하세요, Docker!";
    ?>
  5. Docker 이미지를 빌드하고 컨테이너를 실행합니다.
  6. # 이미지 빌드
    docker build -t my-php-app .
    
    # 컨테이너 실행
    docker run -d -p 8080:80 my-php-app

    실행 결과: 웹 브라우저에서 http://localhost:8080에 접속하면 "안녕하세요, Docker!"가 출력됩니다.

    코드 한 줄씩 동작 설명

    • FROM php:7.4-apache: PHP 7.4와 Apache 서버가 설치된 기본 이미지를 사용합니다.
    • COPY src/ /var/www/html/: src 폴더의 내용을 Docker 이미지의 /var/www/html/ 경로로 복사합니다.
    • EXPOSE 80: 컨테이너가 80번 포트를 사용할 것임을 선언합니다.
    • docker build -t my-php-app .: 현재 디렉터리의 Dockerfile을 사용하여 my-php-app이라는 이름의 이미지를 빌드합니다.
    • docker run -d -p 8080:80 my-php-app: my-php-app 이미지를 기반으로 백그라운드에서 실행하며, 로컬 8080 포트를 컨테이너 80 포트와 연결합니다.
    • 4. 실전 활용 예제

      예제 1: 데이터베이스와의 통합

      쇼핑몰에서 사용자의 장바구니 정보를 저장하기 위해 PHP와 MySQL을 사용하는 경우, Docker를 통해 두 개의 컨테이너를 연결할 수 있습니다.

      # Docker Compose 파일 (docker-compose.yml)
      version: '3'
      services:
        web:
          image: php:7.4-apache
          volumes:
            - ./src:/var/www/html
          ports:
            - "8080:80"
          
        db:
          image: mysql:5.7
          environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: shop

      이렇게 설정하면 PHP 애플리케이션과 MySQL 데이터베이스를 각각의 컨테이너에서 실행할 수 있어, 독립적이고 일관된 개발 환경을 유지할 수 있습니다.

      예제 2: CI/CD 파이프라인

      Docker는 CI/CD(지속적 통합 및 지속적 배포) 환경에서도 많이 사용됩니다. 예를 들어, Jenkins 또는 GitHub Actions와 통합하여 코드가 푸시될 때마다 자동으로 Docker 이미지를 빌드하고 배포할 수 있습니다.

      5. 흔한 실수와 주의사항

      실수 1: 포트 매핑 실수

    • 잘못된 코드:
    • docker run -d -p 8080:80 my-php-app
    • 올바른 코드:
    • docker run -d -p 80:80 my-php-app

      설명: 포트를 잘못 매핑하면 원하는 포트에서 접근할 수 없습니다.

      실수 2: 데이터 손실

    • 잘못된 코드:
    • # 데이터베이스 컨테이너에 데이터 저장을 위한 설정 없음
    • 올바른 코드:
    •   db:
          image: mysql:5.7
          volumes:
            - db_data:/var/lib/mysql
      volumes:
        db_data:

      설명: 데이터베이스 컨테이너에 데이터를 저장하기 위한 볼륨 설정을 하지 않으면, 컨테이너를 삭제할 때 데이터가 손실됩니다.

      6. 정리

    • Docker와 컨테이너를 사용하면 소프트웨어의 배포와 관리가 용이해진다.
    • 컨테이너는 격리된 실행 환경을 제공하여 개발과 운영 환경의 불일치를 해결한다.
    • Docker Compose를 사용하면 여러 서비스를 쉽게 연결하고 관리할 수 있다.
    • CI/CD와 통합하여 자동화된 배포 환경을 구현할 수 있다.

다음에 학습하면 좋은 주제: Kubernetes(컨테이너 오케스트레이션), Docker Compose(멀티 컨테이너 관리), CI/CD 도구 사용법.