본문 바로가기

잡부생활/Container

도커컴포즈로 Apache, PHP, MySQL 환경 구성하기

도커 컨테이너를 이용하여 로컬 APM 개발 환경을 구성해보자.

 

/php/web_dev 경로에 Dockerfile을 저장한다. (파일명 Dockerfile)

Dockerfile은 단순히 도커 컨테이너 이미지를 빌드해주는 파일이다.

docker-compose의 경우 도커 컨테이너를 정의해주는 파일이다.

 

아래와 같이 Dockerfile은 php:7.3.3-apche 이미지를 빌드한다.

FROM: 도커 이미지 선택

RUN: 도커 컨테이너 내에서 실행하는 커맨드

EXPOSE: 포트 바인딩

FROM php:7.3.3-apache
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli
EXPOSE 80

 

docker-compose의 경우 아래와 같이 각 빌드된 이미지에 대한 path, volumes, network 등 옵션을 정의한다.

기존에 생성한 docker-compose.yml 파일을 아래와 같이 수정하자. 각 옵션들은 직관적으로 이해할 수 있다.

version: '3.3'
services:
  web:
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php73
    depends_on:
      - db
    volumes:
      - ./php:/var/www/html/
    ports:
      - 8000:80
  db:
    container_name: mysql8
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - 6033:3306

 

더 자세한 내용은 dockerhub에서 확인할 수 있다. 각 이미지에 관한 docker-compose가 정의되어 있다.

 

mysql - Docker Hub

Supported tags and respective Dockerfile links Quick reference What is MySQL? MySQL is the world's most popular open source database. With its proven performance, reliability and ease-of-use, MySQL has become the leading database choice for web-based appli

hub.docker.com

기존 index.php 파일은 mysql connection test가 가능하도록 수정한다.

<?php
	$host = 'db'; // service name from docker-compose.yml
	$user = 'devuser';
	$password = 'devpass';
	$db = 'test_db';

	$conn = new mysqli($host, $user, $password, $db);
	if($conn -> connect_error){
		echo 'connection failed' . $conn -> connect_error;
	}
	echo 'Sucessfully connected to MYSQL';
?>

 

먼저 기존 도커 컨테이너 및 이미지가 꼬여있을 수 있으니, 아래 명령어를 통해 전체 삭제한다.

PS D:\docker-test\web_dev\php> docker rm $(docker ps -a -q)
PS D:\docker-test\web_dev\php> docker rmi $(docker images -q)

 

그리고 docker-compose up 명령문을 다시 실행한다. 그럼 Dockerfile을 통해 php:7.3.3-apache 이미지를 빌드하고, docker-compose.yml에서 정의한 옵션대로 도커 컨테이너를 실행한다.

docker-compose up

브라우저에 로컬 대역으로 접속해보면 아래와 같이 PHP Apache가 MySQL과 Connection이 성공된 메시지를 받을 수 있다.

Good

만약 실패 메시지가 뜬다면 도커 이미지와 컨테이너를 중지 및 삭제하고 docker-compose up 명령문을 재실행 해보자.