Docker Compose로 Nginx, PHP 구성하기
Server서버 환경 : Ubuntu 18.04.2
Docker Install
# curl -fsSL https://get.docker.com/ | sudo sh
Docker Composer
Docker Container 여러 개를 관리하고 실행하는 도구
1. Docker Composer 최신 버전 설치
최신 버전 설치 링크
# sudo curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
2. 설치 확인
# docker composer --version
Docker version 18.09.7, build 2d0083d
3. Docker 작업 폴더 생성
# mkdir -p /home/dico/docker
# cd /home/dico/docker
Nginx
1. Nginx 설정 파일 작성
# mkdir -p nginx/conf.d
# vi /home/dico/docker/nginx/conf.d/default.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 php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
- listen : 연결 포트
- root : nginx가 바라보는 루트 디렉토리
- index : 메인 페이지
- fastcgi_pass : php-fpm.sock 경로
2. PHP 소스 작성
# mkdir -p nginx/html
# vi /home/dico/docker/nginx/html/index.php
<?php
echo 'owo';
echo phpinfo();
?>
3. dockerfile 작성
# vi /home/dico/docker/nginx/dockerfile
FROM nginx:latest
# 설정 파일을 Docker 내부로 복사
COPY ./conf.d/default.conf /etc/nginx/conf.d/default.conf
# Docker Host로 포트 번호 노출
EXPOSE 80
# 백그라운드에서 실행
ENTRYPOINT ["nginx","-g","daemon off;"]
docker-compose.yml 작성
# vi docker-compose.yml
version: "3.7"
services:
db:
# 컨테이너 이름 지정
container_name: db
# 이미지 지정 - Official Images로 컨테이너를 생성
image: mysql
restart: always
environment:
MYSQL_DATABASE: dico_db
MYSQL_USER: dico
MYSQL_PASSWORD: dico
MYSQL_ROOT_PASSWORD: root
# 호스트에 있는 폴더를 컨테이너 안에 있는 폴더로 마운트
volumes:
- ./mysql/data:/var/lib/mysql:rw
# 연결 포트 지정
ports:
- "3306:3306"
app:
container_name: php
image: php:fpm
# db 컨테이너가 올라간 후 app 컨테이너를 올린다.
depends_on:
- db
ports:
- "9000:9000"
volumes:
- ./nginx/html:/var/www/html
environment:
PMA_HOST: db
PMA_USERE: dico
PMA_PASSWORD: root
web:
container_name: nginx
# 이미지 지정 - 직접 작성한 dockerfile을 실행하여 컨테이너 생성
build:
context: ./nginx
dockerfile: dockerfile
depends_on:
- app
volumes:
- ./nginx/html:/var/www/html
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
- "443:443"
links:
- app
restart: always
데몬으로 실행
# docker-compose up -d
확인
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca7d79e077b4 docker_web "nginx -g 'daemon of…" 8 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
d8e5502f7f90 php:fpm "docker-php-entrypoi…" 11 seconds ago Up 9 seconds 0.0.0.0:9000->9000/tcp php
ad039c0eba2c mysql "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp db
URL 확인
localhost/index.php