1. 설치 환경
- 우선 해당 환경을 구동을 하려면 도커가 먼저 설치가 되어 있어야 합니다.
- 필요사항
- OS: Windows 10 64bit or Windows 11 64bit
- RAM : 4GB
- WSL 2 기능 활성화
- 도커(Docker) 설치
- 도커 다운로드 : https://docs.docker.com/desktop/windows/install/
미리설정한 도커 파일 다운로드 :
2. 설치 설정
폴더 구조 설명
images -> 빌더 설정관련 파일 └ ubuntu -> 우분투 빌더 이미지 관련 파일 : nginx, php8.1 설치 이미지 └ └ conf └ └ └ nginx.conf -> nginx 설정파일 └ └ └ supervisord.conf -> 슈퍼바이저 설정파일 └ └ Dockerfile -> 우분투 빌더 설정 파일 mariadb_data -> DB 파일 source -> 웹소스 파일 |
nginx 웹 서버 설정
파일경로 : images/ubuntu/conf/nginx.conf
server {
listen 80;
root /var/www/html/php/public;
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/php8.1-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-fpm8.1 --nodaemonize --fpm-config /etc/php/8.1/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 + PHP8.1 설치 설정 Dockerfile
파일경로 : images/ubuntu/Dockerfile (파일확장자명 없음)
php8.0부터는 php-json이 php 코어에 포함이 되기 때문에 php8.1-json을 추가하면 오류가 발생이됩니다.
설치시 자동으로 json확장 모듈이 설치 되므로 php8.1-json옵션을 빼고 진행합니다.
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 php8.1 \
php8.1-fpm \
php8.1-common \
php8.1-mysql \
php8.1-gmp \
php8.1-ldap \
php8.1-curl \
php8.1-intl \
php8.1-mbstring \
php8.1-xmlrpc \
php8.1-gd \
php8.1-bcmath \
php8.1-xml \
php8.1-cli \
php8.1-memcache \
php8.1-redis \
php8.1-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_php81
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 파일에 설정된 기반으로 도커 이미지를 빌드합니다.
./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설정이 가능합니다.
mysql 호스트 정보를 설정합니다.
설치
미리설정한 도커 파일 다운로드 :
윈도우 환경에서는 C:\Users\[사용자계정폴더]\ 하위에 폴더를 생성하여 작업해 주시면 됩니다.
C:\Users\[사용자계정폴더]\ 하위에 php81_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 접속시 데이터베이스 접속 성공 화면
'소프트웨어 개발 > Docker' 카테고리의 다른 글
도커 ( docker ) PHP 개발환경 설치 Nginx, PHP8.1,Mariadb / codeigniter4 코드이그나이터4 windows10/11 윈도우즈 10/11 (0) | 2022.02.05 |
---|---|
도커 ( docker ) PHP 개발환경 설치 Nginx, PHP8.1,Mariadb / windows10/11 윈도우즈 10/11 (0) | 2022.02.05 |
도커 ( docker ) PHP 개발환경 설치 Nginx, PHP7.4,Mariadb / windows10/11 윈도우즈 10/11 (0) | 2022.02.02 |
도커 Docker - CRIT Supervisor is running as root (0) | 2022.02.01 |
docker exited with code 0 (0) | 2022.01.31 |
댓글