docker-compose php, mysql을 Dockerfile, docker-compose.yaml을 이용하여 서버 구성하기
파일구성
src폴더 안에는 php파일들이 들어갑니다.
mysql.php 코드
<!-- ./src/mysql.php -->
<?php
$env = parse_ini_file('../.env'); // env파일 경로를 확인해서 key, value로 저장
$host = $env["MYSQL_HOST"]; // MySQL 연결 주소
$username = $env["MYSQL_USERNAME"]; // MySQL 사용자 이름
$password = $env["MYSQL_PASSWORD"]; // MySQL 사용자 비밀번호
$dbname = $env["MYSQL_DATABASE"]; // 데이터베이스 이름
$dbport = $env["MYSQL_PORT"]; // 데이터베이스 포트
// MySQL에 연결
$conn = new mysqli($host, $username, $password, $dbname, $dbport);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// 연결 종료
$conn->close();
?>
Dockerfile 파일
# ./Dockerfile
# PHP Docker 공식 문서 : https://hub.docker.com/_/php
# PHP 이미지를 사용합니다. 버전은 필요에 따라 조정할 수 있습니다.
FROM php:8.2-cli
# PHP의 mysqli을 사용하기 위한 extension을 설치
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
# 나머지 필요한 작업들을 계속합니다치
COPY ./src /php/src/
WORKDIR /php/src/
# PHP 내장 서버를 시작합니다.
# Docker 컨테이너의 80포트를 활성화 합니다.
CMD [ "php", "-S", "0.0.0.0:80" ]
docker-compose.yaml 파일
# ./docker-compose.yaml
networks:
# 해당 도커 컴포즈로 실행한 컨테이너는 동일한 네트워크를 공유한다.
backend_network:
services:
server:
# 도커파일을 이용하여 이미지를 생성한다.
build:
context: ./
dockerfile: Dockerfile
# php서버를 외부에서 접속하기 위해서 5500포트를 사용한다.
ports:
- '5500:80'
# docker-compose를 이용하여 개발하기 위해서 ./src, ./.env파일을 동기화 한다.
volumes:
- ./src:/php/src
- ./.env:/php/.env
networks:
- backend_network
# docker-compose를 실행할때 server는 mysql 서비스가 먼저 실행되야 server 컨테이너를 생성한다.
depends_on:
- mysql
# docker container를 생성할때 로그의 제한을 둔다.
logging:
driver: "json-file"
options:
max-file: "3"
max-size: "10m"
mysql:
# 컨테이너의 베이스가 될 이미지를 받는다(현재 docker-compose.yaml은 mysql 8.2.0버전을 사용한다.)
image: mysql:8.2.0
volumes:
# mysql의 데이터의 초기화를 방지하기 위해 볼륨으로 저장한다.
- mysql_data:/var/lib/mysql
env_file:
# yaml의 상대경로로 환경변수 파일을 찾는다.
- ./.mysql.env
environment:
MYSQL_DATABASE: mydatabase
networks:
- backend_network
ports:
# 외부에 포트를 노출시킨다. mysql의 default포트는 3306이고 4500포트로 외부에 노출시킨다.
- "4500:3306"
logging:
driver: "json-file"
options:
max-file: "3"
max-size: "10m"
# 네이밍 볼륨이 있을시 반드시 루트에 한번더 volumes 안에 해당 네이밍 볼륨 이름을 넣는다.
volumes:
# mysql은 mysql_data라는 네이밍 볼륨을 사용하기 때문에 아래에 추가해준다.
mysql_data:
아래 사진과 같이 "docker-compose up -d --build"를 실행하면 자동으로 docker container를 생성해줍니다.
"docker ps"를 실행시 아래처럼 실행되고 있는 docker container를 확인할수 있습니다.
gitHub : https://github.com/Alex-Choi0/Blog_PHP_MYSQL_DockerCompose
댓글
댓글 쓰기