간단한 PHP 도커화 환경 구축
6802 단어 devopsphpproductivitytutorial
일부 애플리케이션에는 로컬 시스템에 없는 PHP 확장이 필요하거나 애플리케이션 자체가 아닌 인프라의 일부로 간주되지만 문제를 일으킬 수 있는 프로덕션 서버에 설정된 일부 특정 php.ini 구성이 있을 수 있습니다. 불일치 때문에 (몇 년 전에 이런 일이 일어났습니다). Docker를 사용하면 이러한 유형의 문제를 해결할 수 있으며 응용 프로그램을 개발하는 정말 좋은 방법이라는 추가적인 이점도 있습니다. 이에 대한 주장은 IDE에서 원격 디버깅을 잘 지원한다는 것입니다.
개요
전체 스택, 즉 fpm, nginx 및 mysql을 데이터베이스로 사용하는 PHP 8.1을 설정하는 과정을 거치고 마지막에는 기본 Symfony 설치를 수행하여 모든 것을 함께 테스트합니다.
전체 설정이 포함된 저장소를 확인하고 싶지 않다면 Github에서 찾을 수 있습니다.
docker-compose 구성 설정
docker-compose에 무엇을 회전시켜야 하는지 알려주는 두 개의 파일이 있습니다. 첫 번째는 docker-compose.yml이고 다른 하나는 docker-compose.override.yml입니다. 재정의 파일은 호스트 이름을 사용하여 호스트를 노출합니다
dockerhost
. 이는 디버깅과 다른 컨테이너를 더 쉽게 참조하는 데 모두 유용합니다.version: '3.5'
services:
devbox:
container_name: devbox-nginx
build:
context: ./docker/nginx
dockerfile: Dockerfile
ports:
- "9001:80"
volumes:
- .:/app:cached
restart: unless-stopped
depends_on:
- devbox-service
devbox-service:
container_name: devbox-service
build:
context: .
volumes:
- .:/app:cached
- ./docker/service/php.ini:/usr/local/etc/php/conf.d/99-app.ini
- ./docker/service/www.conf:/usr/local/etc/php-fpm.d/www.conf
restart: unless-stopped
environment:
XDEBUG_CONFIG: ${XDEBUG_CONFIG}
APP_ENV: ${APP_ENV}
APP_DEBUG: ${APP_DEBUG}
APP_SECRET: ${APP_SECRET}
env_file:
- .env
- .env.local
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: devbox-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
ports:
- "3308:3306"
volumes:
- database-volume:/var/lib/mysql
volumes:
database-volume:
driver: "local"
Dockerfile 추가
두 개의 Dockerfile이 사용됩니다. 하나는 php-fpm용이고 다른 하나는 nginx용입니다. 앱 자체에 대한 하나는 php-fpm이며 프로젝트의 루트에 있고 다른 하나는 docker/nginx/Dockerfile에 있습니다. nginx Dockerfile은 default.conf에 정의된 nginx 구성을 컨테이너에 복사하기만 합니다. nginx 구성은 docker-compose에 정의된 서비스의 이름이 지정되었다는 사실과 상당히 다릅니다.
nginx용 Dockerfile
FROM nginx:stable
COPY default.conf /etc/nginx/conf.d/default.conf
php-fpm용 Dockefile
FROM php:8.1-fpm-alpine
LABEL maintainer="alexandrunastase@github"
LABEL description="Devbox Docker image"
# User build args
ARG APP_ENV="prod"
ARG APP_DEBUG="0"
ARG APP_LOG="php://stdout"
# Environment variables
ENV APP_ENV=${APP_ENV}
ENV APP_DEBUG=${APP_DEBUG}
ENV APP_LOG=${APP_LOG}
ENV XDEBUG_CONFIG=""
ENV COMPOSER_NO_INTERACTION=1
# Add PHP user
ARG PHP_USER_ID=1000
ARG PHP_GROUP_ID=1000
RUN set -x \
&& addgroup -g $PHP_GROUP_ID -S php \
&& adduser -u $PHP_USER_ID -D -S -G php php
# Install dependencies
RUN set -ex \
&& docker-php-source extract \
&& apk add --update --no-cache \
${PHPIZE_DEPS} \
curl \
# Runtime deps
icu-dev icu-libs \
libzip-dev zlib-dev \
libxml2-dev \
oniguruma-dev \
&& pecl install xdebug \
&& docker-php-ext-install intl opcache pdo_mysql zip bcmath mbstring sockets pcntl soap sockets ctype > /dev/null \
&& docker-php-ext-enable intl opcache pdo_mysql zip bcmath mbstring sockets pcntl soap sockets ctype \
&& apk del ${PHPIZE_DEPS} \
&& docker-php-source delete
# Copy configuration files
COPY ./docker/service/www.conf /usr/local/etc/php-fpm.d/www.conf
COPY ./docker/service/php.ini $PHP_INI_DIR/conf.d/99-app.ini
COPY ./docker/service/xdebug.ini $PHP_INI_DIR/conf.d/docker-php-ext-xdebug.ini
# Install composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY --chown=php . /app
WORKDIR /app
USER php
메이크파일 만들기
Makefile은 컨테이너의 이름을 기억하거나 셸 기록을 검색하는 데 필요한 방법을 기억할 필요 없이 일반 명령에 훨씬 쉽게 액세스할 수 있게 해주기 때문에 모든 docker-compose 설정에 유용한 추가 기능입니다.
참고: Makefile을 편집할 때 특히 명령을 들여쓸 때 공백 대신 항상 탭을 사용해야 합니다.
.PHONY: run
run:
@if [ ! -e ".env.local" ]; then\
cp .env .env.local; \
fi
@docker-compose up -d
@echo "Service is running on http://localhost:9001"
.PHONY: install
install:
@docker-compose exec --user="php" -T devbox-service composer install
.PHONY: stop
stop:
@docker-compose stop
.PHONY: enter
enter:
@docker-compose exec --user="php" devbox-service /bin/sh
.PHONY: enter-as-root
enter-as-root:
@docker-compose exec --user="root" devbox-service /bin/sh
.PHONY: test
test:
@docker-compose exec --user="php" -T devbox-service /bin/sh -c 'APP_ENV="test" ./bin/phpunit --testdox'
.PHONY: destroy
destroy:
@docker-compose down --rmi local
Symfony 추가 및 모든 테스트
전체 설정을 테스트하기 위해 Symfony 애플리케이션을 설정할 수 있습니다. 여기에서 지침을 찾을 수 있습니다: https://symfony.com/doc/current/setup.html . 나는 글을 쓰는 시점에 5.4인 LTS 버전을 사용했다.
참고: 데이터베이스가 생성되었는지 확인하기 위해 작성기 파일도 업데이트했습니다. 이를 수행할 수 있는 다른 방법이 있으면 건너뛸 수 있습니다.
xDebug 설정
./docker/service/xdebug.ini 파일의 내용을 주석 해제하여 디버깅을 활성화할 수 있습니다.
다음은 PHPStorm에서 xDebug를 구성하는 단계입니다.
PHP Remote Debugging
를 선택합니다. 로컬 통역사가 제거되었는지 확인합니다Docker Compose
를 선택하고 서비스devbox-service
를 선택합니다.Connect to existing container
여야 합니다.작업 데모
docker-compose에서 포트 9001은 localhost에 매핑되므로 실행 후 모든 것이 작동하는지 확인할 수 있습니다.
make run
컨테이너 설정
make install
모든 작곡가 패키지를 설치합니다.
200 상태 코드를 반환해야 하는
http://localhost:9001/healthz
라는 엔드포인트가 정의되어 있습니다.테스트를 실행하려면 다음을 사용할 수 있습니다.
make test
다른 작성기 패키지를 요구하는 것과 같은 다른 임시 명령을 실행하려면 다음을 수행할 수 있습니다.
make enter
사용하여 테스트
Reference
이 문제에 관하여(간단한 PHP 도커화 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexandrunastase/building-a-simple-php-dockerized-environment-296k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)