이 글은 주로 Laravel 애플리케이션을 조정하기 위한 Docker Compose의 사용을 소개합니다. 이제 이를 여러분과 공유합니다.
Laravel의 공식 개발 환경에서는 Homestead를 권장합니다. 실제로는 Packaged Vagrant box입니다), 상대적으로 무겁다고 느껴져서 Docker compose를 이용하여 개발 환경을 구성하고 여기에 공유해봅니다.
Docker 및 Docker compose를 먼저 설치해야 하며, Docker Warehouse 이미지를 국내 이미지로 교체하는 것이 가장 좋습니다. 일반적으로 개발 컴퓨터에서 Vagrant를 실행한 다음 그 컴퓨터에서 Docker 및 기타 애플리케이션을 실행합니다.
Docker에서는 하나의 컨테이너가 하나의 서비스를 실행하도록 공식적으로 권장하므로 Compose 오케스트레이션이 이루어지며 각 서비스는 컨테이너 상호 연결 기술을 통해 통신합니다. 예를 들어 Php 서비스가 Mysql에 연결될 때 다음과 같이 작성하면 됩니다. 호스트 이름을 컨테이너 이름으로 변환하고 내부적으로 특정 IP로 직접 변환합니다. 코드 디렉터리는 데이터 볼륨을 사용하여 컨테이너에서 호스트로 매핑되고, 구성 파일(Nginx 등)도 데이터 볼륨을 통해 컨테이너에 매핑됩니다.
이런 서비스 세트를 캡슐화해두었습니다. 평소에 사용하신다면 그냥 복제해서 바로 사용하시면 됩니다. 여기서는 주로 구현 아이디어에 대해 이야기하겠습니다.
프로젝트 주소: https://github.com/rootrl/php...
내 프로젝트 디렉토리 구조:
php-environment-with-docker/
├── bin
│ ├── 작곡가
│ ├ ── getContainerIp
│ └── php
├── conf
│ ├── nginx
│ │ └── conf.d
│ │ └── nginx.conf
│ └── redis
│ └── redis .conf
├── docker-compose.yaml
├── Dockerfile.php
├── LICENSE
├── README.MD
└── start
bin 이것들은 모두 캡슐화된 명령줄 도구이며 실제로는 Docker 컨테이너 서비스이지만 모두 즉시 사용 가능한 서비스입니다.
conf 이 디렉터리는 애플리케이션의 구성 디렉터리입니다. 이는 Volume을 사용하여 컨테이너에 있는
docker-composer.yaml의 오케스트레이션 파일에 매핑됩니다.
Dockerfile.php php에 대한 자세한 내용은 아래에서 설명합니다. 빌드(DNS 변경 및 특수 확장 설치와 같은 일부 사용자 지정이 있을 예정)
start ./start를 실행하여 모든 서비스를 시작합니다.
이 파일은 compose
version: '2' services: nginx: depends_on: - "php" image: "nginx" volumes: - "$PWD/conf/nginx/conf.d:/etc/nginx/conf.d" - "$PWD/www:/usr/share/nginx/html" ports: - "8888:80" networks: - oa-network container_name: "oa-nginx" command: /bin/bash -c "mkdir -p /var/www && ln -s /usr/share/nginx/html /var/www && nginx -g 'daemon off;'" php: image: "oa-php-fpm" build: context: . dockerfile: "Dockerfile.php" networks: - oa-network container_name: "oa-php-fpm" volumes: - "$PWD/www:/var/www/html" mysql: image: mysql:5.7 volumes: - "$PWD/db_data:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: oa MYSQL_USER: oa MYSQL_PASSWORD: oa123 ports: - "3306:3306" networks: - oa-network container_name: "oa-mysql" redis: image: "redis" ports: - "6379:6379" networks: - oa-network volumes: - "$PWD/conf/redis/redis.conf:/usr/local/etc/redis/redis.conf" container_name: "oa-redis" networks: oa-network: driver: bridge
의 오케스트레이션 파일입니다. php-fpm, nignx, mysql, redis의 네 가지 서비스가 여기에 정의되어 있습니다(다른 서비스가 필요한 경우 직접 추가하세요). 그런 다음 모든 컨테이너가 쉽게 통신할 수 있도록 공용 네트워크를 정의합니다.
예를 들어, nginx.conf
server { listen 80; server_name localhost; root /usr/share/nginx/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/public/$fastcgi_script_name; include fastcgi_params; } }
여기 php-fpm을 사용한 연결 방법이 있습니다: php:9000
FROM php:7.2-fpm Run echo "nameserver 223.5.5.5" >> /etc/resolv.conf \ && echo "nameserver 223.6.6.6" >> /etc/resolve.conf \ && apt-get update \ && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install mysqli pdo_mysql \ && pecl install swoole \ && pecl install redis \ && docker-php-ext-enable swoole redis
이것은 PHP 이미지 빌드입니다. 여기에서 DNS 서버가 변경되고 여러 PHP 확장이 있습니다. 설치되어 있습니다.
./start를 사용하세요.
./bin/php -v # Laravel artisan ./bin/php artisan
위 내용은 모두의 학습에 도움이 되기를 바랍니다. PHP 중국어 웹사이트로!
관련 권장 사항:
위 내용은 Docker Compose를 사용하여 Laravel 애플리케이션 조정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!