본문 바로가기
소프트웨어 개발/Docker

도커 ( docker ) PHP 개발환경 설치 Nginx, PHP7.4,Mariadb / windows10/11 윈도우즈 10/11

by 인생은즐겁게 2022. 2. 2.
반응형

1. 설치 환경

 

  • 우선 해당 환경을 구동을 하려면 도커가 먼저 설치가 되어 있어야 합니다.
  • 필요사항
    • OS: Windows 10 64bit or Windows 11 64bit
    • RAM : 4GB
    • WSL 2  기능 활성화
    • 도커(Docker) 설치
  • 도커 다운로드 : https://docs.docker.com/desktop/windows/install/

 

미리설정한 도커 파일 다운로드 : 

ci_project.zip
0.00MB

 

2. 설치 설정

 

폴더 구조 설명

 
images -> 빌더 설정관련 파일
 └ ubuntu  -> 우분투 빌더 이미지 관련 파일 : nginx, php7.4 설치 이미지
 └  └ conf
 └  └ └ nginx.conf -> nginx 설정파일
 └  └  supervisord.conf -> 슈퍼바이저 설정파일
 └  └ Dockerfile -> 우분투 빌더 설정 파일

 mariadb_data -> DB 파일
 source -> 웹소스 파일

 

 

nginx 웹 서버 설정 

 

파일경로 : images/ubuntu/conf/nginx.conf

 

server {
        listen 80;
        root /var/www/html;
        index index.html index.htm index.php;

        server_name localhost;

    	error_log  /var/log/nginx/error.log;
	access_log /var/log/nginx/access.log;


        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }
}

 

슈퍼바이저 설정 

 

파일경로 :  images/ubuntu/conf/supervisord.conf

 

[supervisord]
user = root
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
pidfile=/run/supervisord.pid

[program:nginx]
command=nginx -g "daemon off;"
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0


[program:php-fpm]
command=/bin/bash -c "mkdir -p /var/run/php && php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf"
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

 

우분투 Nginx + PHP7.4 설치 설정 Dockerfile

 

파일경로 : images/ubuntu/Dockerfile (파일확장자명 없음)

 

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y software-properties-common
RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php


RUN apt-get update -y && apt-get install -y nginx supervisor curl vim
RUN apt-get update -y && apt-get install -y php7.4 \
    php7.4-fpm \
    php7.4-common \
    php7.4-mysql \
    php7.4-gmp \
    php7.4-ldap \
    php7.4-curl \
    php7.4-json \
    php7.4-intl \
    php7.4-mbstring \
    php7.4-xmlrpc \
    php7.4-gd \
    php7.4-bcmath \
    php7.4-xml \
    php7.4-cli \
    php7.4-memcache \
    php7.4-redis \
    php7.4-zip

#Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY ./conf/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./conf/supervisord.conf /etc/supervisor/conf.d/supervisord.conf


EXPOSE 80
EXPOSE 443
#EXPOSE 22
#EXPOSE 9000

CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

 

 

 

 

docker-compose.yml 설정

 

파일경로 : ./docker-compose.yml

 

version: '3.7'
services:
    ubuntu:
        container_name: nginx_php74
        build:
            context: ./images/ubuntu
            dockerfile: Dockerfile
        stdin_open: true
        tty: true
        volumes:
            - ./source:/var/www/html
            - ./images/ubuntu/conf/nginx.conf:/etc/nginx/conf.d/default.conf
        ports:
            - "80:80"
            - "443:443"
    db:
        image: mariadb:latest
        container_name: devdb
        restart: always
        environment:
            MYSQL_DATABASE: dev
            MYSQL_USER: dev
            MYSQL_PASSWORD: dev2000
            MYSQL_ROOT_PASSWORD: dev2000
        volumes:
            - ./mariadb_data:/var/lib/mysql    
        ports:
            - "3306:3306"

 

./images/ubuntu/Dockerfile 파일에 설정된 기반으로 도커 이미지를 빌드합니다.

        build:
            context: ./images/ubuntu
            dockerfile: Dockerfile

./source:/var/www/html : 웹소스 경로이며, 우분투 컨테이너에 source 폴더를 링크합니다.

자신의 로컬환경인 윈도우즈 source 폴더에서 웹 파일들을 작성하여 작업하시면 됩니다.

 

./images/ubuntu/conf/nginx.conf:/etc/nginx/conf.d/default.conf : nginx 설정 경로이며, 우분투 컨테이너에 nginx.conf를 링크합니다. nginx 설정 시 직접 콘솔에 들어가지 안아도 윈도우즈 로컬 ./images/ubuntu/conf/nginx.conf nginx설정이 가능합니다.

        volumes:
            - ./source:/var/www/html
            - ./images/ubuntu/conf/nginx.conf:/etc/nginx/conf.d/default.conf

mysql 호스트 정보를 설정합니다.

        environment:
            MYSQL_DATABASE: dev
            MYSQL_USER: dev
            MYSQL_PASSWORD: dev2000
            MYSQL_ROOT_PASSWORD: dev2000
 
윈도우즈 로컬 mariadb_data에 mariadb 컨테이너에 있는 데이터를 저장합니다.
 
        volumes:
            - ./mariadb_data:/var/lib/mysql  

 

 

설치

 

 

미리설정한 도커 파일 다운로드 : 

ci_project.zip
0.00MB

 

윈도우 환경에서는 C:\Users\[사용자계정폴더]\ 하위에 폴더를 생성하여 작업해 주시면 됩니다.

 

C:\Users\[사용자계정폴더]\ 하위에 ci_project.zip 내려받아 압축을 풀어줍니다.

 

 

해당 폴더에서 오른쪽 마우스 클릭을 하면 아래와 같은 팝업 메뉴가 나타나며

windows 터미널 열기 버튼을 클릭하여 터미널을 실행합니다.

Windows 터미널에서 docker-compose up -d 명령어를 실행 합니다.

 

docker-compose up -d

 

설치가 잘되었는지 확인을 하려면 ./source 폴더에 index.php 파일을 생성하여 다음과 같이 작성합니다.

 

<?php

phpinfo();

?>

 

웹 브라우저를 열고 localhost로 접근합니다. 설치가 정상적으로 되었으면 아래 이미지 처럼 나타납니다.

 

 

DB접속 테스트

 

 

index.php 파일에서 DB접속이 잘되는지 테스트를 해봅니다.

 

호스트명 : devdb (컨테이너명을 참조합니다.)

db포트 : 3306

데이터베이스명 : dev

데이터베이스 유저 : dev

데이터베이스 비밀번호 : dev2000

 

예)

<?php

$dsn = "mysql:host=[호스트명];port=3306;dbname=[DB명];charset=utf8";
try {
    $pdo = new PDO($dsn, "[DB유저]", "[DB비밀번호]");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "데이터베이스 연결 성공!!<br/>";
} catch(PDOException $e) {
    echo $e->getMessage();
}


?>

 

구현

<?php

$dsn = "mysql:host=devdb;port=3306;dbname=dev;charset=utf8";
try {
    $pdo = new PDO($dsn, "dev", "dev2000");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "데이터베이스 연결 성공!!<br/>";
} catch(PDOException $e) {
    echo $e->getMessage();
}


?>

 

웹 브라우저에서 localhost 접속시 데이터베이스 접속 성공 화면

반응형

댓글