Symfony 5 Docker와 함께 개발
오늘 제 동료가 저에게 Docker를 소개해 달라고 했습니다. 왜냐하면 그는 진실한 예로 Symfony 프로젝트를 개발하려고 하기 때문입니다.이것 좀 봅시다. 그것은 매우 빠르고, 매우 간단하며, 매우 재미있습니다!
Symfony는 의존 항목과 스크립트, 이름 공간 등을 관리합니다.composer라는 파일을 사용합니다.json.의존 항목은vendor라는 디렉터리에 다운로드됩니다.
개발에 전념하여 우리는 누구나 저장소를 복제하고 응용 프로그램을 쉽게 실행할 수 있도록 기존의 설정과 격리 환경을 만들고 싶습니다.우리는 세 개의 용기를 사용할 것이다.
데이터베이스 인증서, 응용 프로그램 키 등 용기의 매개 변수로 환경 변수를 사용해야 합니다.
우리는 를 사용하여 모든 용기를 배치하고 운행할 것이다.
Project
│
├── docker-compose.yml
│
├── database/
│ ├── Dockerfile
│ └── data/
│
└── php-fpm/
│ └── Dockerfile
│
├── nginx/
│ ├── Dockerfile
│ └── nginx.conf
│
└── logs/
└── nginx/
Docker 작성
MySQL 데이터베이스
MariaDB 컨테이너 만들기
# docker/database/Dockerfile
FROM mariadb:latest
CMD ["mysqld"]
EXPOSE 3306
설명하다
# docker/database/Dockerfile
FROM mariadb:latest
CMD ["mysqld"]
EXPOSE 3306
MariaDB 공식 이미지
PHP-FPM
PHP-FPM 용기를 사용하면 시작할 때 의존 항목을 설치하고 데이터베이스 마이그레이션을 실행하고자 합니다.따라서 PDO MySQL 확장을 설치하고composer를 설치한 다음Symfony 마이그레이션 스크립트를 설치해야 합니다.
그러나 MySQL 서버가 준비되기 전에 마이그레이션을 실행하면 문제가 발생할 수 있습니다.우리도 이 문제를 처리해야 한다.
Docker compose를 사용하면 구성에 따라 depends\u를 지정하여 다른 컨테이너를 기다릴 수 있습니다.그러나 이것은 Docker compose가 MySQL 서버가 준비될 때까지 기다린다는 것을 의미하지 않는다. 이것은 MySQL 용기가 시작될 때까지 기다린다는 것을 의미하지 않는다.
다행히도
스크립트의 도움으로 MySQL 용기의 포트 3306이 열리기를 기다릴 수 있습니다. 또는 인증서를 사용하여 MySQL에 연결할 때까지 기다릴 수도 있습니다.
# docker/php-fpm/Dockerfile
FROM php:fpm-alpine
COPY wait-for-it.sh /usr/bin/wait-for-it
RUN chmod +x /usr/bin/wait-for-it
RUN apk --update --no-cache add git
RUN docker-php-ext-install pdo_mysql
COPY --from=composer /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
CMD composer install ; wait-for-it database:3306 -- bin/console doctrine:migrations:migrate ; php-fpm
EXPOSE 9000
설명하다
# docker/php-fpm/Dockerfile
FROM php:fpm-alpine
COPY wait-for-it.sh /usr/bin/wait-for-it
RUN chmod +x /usr/bin/wait-for-it
RUN apk --update --no-cache add git
RUN docker-php-ext-install pdo_mysql
COPY --from=composer /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
CMD composer install ; wait-for-it database:3306 -- bin/console doctrine:migrations:migrate ; php-fpm
EXPOSE 9000
기다린다
NGINX 회사
알겠습니다. 이 부분은 좀 복잡합니다. NGINX 프로필, PHP-FPM 프록시와 기본 NGINX 사이트에 사용할 단독 파일을 만들 것입니다.
우선 Dockerfile 정의
# docker/nginx/Dockerfile
FROM nginx:alpine
WORKDIR /var/www
CMD ["nginx"]
EXPOSE 80
설명하다
# docker/nginx/Dockerfile
FROM nginx:alpine
WORKDIR /var/www
CMD ["nginx"]
EXPOSE 80
# docker/nginx/nginx.conf
user nginx;
worker_processes 4;
daemon off;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-available/*.conf;
}
NGINX-PHP-FPM 구성# docker/nginx/conf.d/default.conf
upstream php-upstream {
server php-fpm:9000;
}
NGINX 사이트 구성# docker/nginx/sites/default.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Docker Compose 구성
3개의 컨테이너 정의가 있습니다. 이제 모든 구성 요소를 연결하기 위해 Docker compose 구성을 설정하면 됩니다.
# docker/docker-compose.yml
version: '3'
services:
database:
build:
context: ./database
environment:
- MYSQL_DATABASE=${DATABASE_NAME}
- MYSQL_USER=${DATABASE_USER}
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
ports:
- "3306:3306"
volumes:
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
- ./database/data:/var/lib/mysql
php-fpm:
build:
context: ./php-fpm
depends_on:
- database
environment:
- APP_ENV=${APP_ENV}
- APP_SECRET=${APP_SECRET}
- DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@database:3306/${DATABASE_NAME}?serverVersion=5.7
volumes:
- ../src:/var/www
nginx:
build:
context: ./nginx
volumes:
- ../src:/var/www
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./logs:/var/log
depends_on:
- php-fpm
ports:
- "80:80"
및 예제 환경 변수:
# docker/.env
DATABASE_NAME=symfony
DATABASE_USER=appuser
DATABASE_PASSWORD=apppassword
DATABASE_ROOT_PASSWORD=secret
APP_ENV=dev
APP_SECRET=24e17c47430bd2044a61c131c1cf6990
Symfony 회사
Symfony 설치를 계속합니다.
$ symfony new src
재생 시간
모든 것이 정확하게 설정되었습니다!우리 용기 가지고 놀자!
$ docker-compose up
이 용기들이 준비되면
를 열면 Symfony 5 환영 화면을 볼 수 있습니다.모든 것이 다 좋아, 즐겁게 놀았어!
나는 이미 위에서 언급한 모든 파일을 위해 저장소를 만들었다 http://localhost
Reference
이 문제에 관하여(Symfony 5 Docker와 함께 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/martinpham/symfony-5-development-with-docker-4hj8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# docker/docker-compose.yml
version: '3'
services:
database:
build:
context: ./database
environment:
- MYSQL_DATABASE=${DATABASE_NAME}
- MYSQL_USER=${DATABASE_USER}
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
ports:
- "3306:3306"
volumes:
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
- ./database/data:/var/lib/mysql
php-fpm:
build:
context: ./php-fpm
depends_on:
- database
environment:
- APP_ENV=${APP_ENV}
- APP_SECRET=${APP_SECRET}
- DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@database:3306/${DATABASE_NAME}?serverVersion=5.7
volumes:
- ../src:/var/www
nginx:
build:
context: ./nginx
volumes:
- ../src:/var/www
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./logs:/var/log
depends_on:
- php-fpm
ports:
- "80:80"
# docker/.env
DATABASE_NAME=symfony
DATABASE_USER=appuser
DATABASE_PASSWORD=apppassword
DATABASE_ROOT_PASSWORD=secret
APP_ENV=dev
APP_SECRET=24e17c47430bd2044a61c131c1cf6990
Symfony 설치를 계속합니다.
$ symfony new src
재생 시간
모든 것이 정확하게 설정되었습니다!우리 용기 가지고 놀자!
$ docker-compose up
이 용기들이 준비되면
를 열면 Symfony 5 환영 화면을 볼 수 있습니다.모든 것이 다 좋아, 즐겁게 놀았어!
나는 이미 위에서 언급한 모든 파일을 위해 저장소를 만들었다 http://localhost
Reference
이 문제에 관하여(Symfony 5 Docker와 함께 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/martinpham/symfony-5-development-with-docker-4hj8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ docker-compose up
Reference
이 문제에 관하여(Symfony 5 Docker와 함께 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/martinpham/symfony-5-development-with-docker-4hj8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)