Docker를 사용하여 Lumen 및 MySQL 설정 - 2부
Dockerfile
및 docker-compose.yml
파일로 Lumen 앱을 고정화했습니다. 그런 다음 다음을 실행하여 앱을 시작했습니다.docker-compose up
이 부분에서 우리는:
Dockerfile
에 필요한 PHP 확장을 설치하십시오. .env
파일을 사용하여 docker-compose.yml
파일에 변수를 전달하는 방법을 알아봅니다. Facade
하는 방법을 알아봅니다. 다음은 이 자습서의 GitHub 리포지토리에 대한 링크입니다.
👉 https://github.com/yossi-abramov/lumen-mysql-docker
docker-compose.yml에 MySQL 8.0 추가
이전 게시물에서 이것은
docker-compose.yml
파일이었습니다.version: '3.5'
services:
lumen:
ports:
- "8000:8000"
volumes:
- .:/var/www/html
- /var/www/html/vendor/
build: .
command: php -S lumen:8000 -t public
restart: always
이제 데이터를 유지하기 위한 볼륨이 있는 MySQL 8을 추가해 보겠습니다.
version: "3.5"
services:
lumen:
ports:
- "8000:8000"
volumes:
- .:/var/www/html
- /var/www/html/vendor/
build: .
command: php -S lumen:8000 -t public
restart: always
depends_on:
- db
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: your_db_name
MYSQL_USER: your_db_user
MYSQL_PASSWORD: your_db_password
MYSQL_ROOT_PASSWORD: root
command: mysqld --default-authentication-plugin=mysql_native_password
volumes:
- ./database/mysql-data:/var/lib/mysql:rw
volumes:
mysql-data:
이
docker-compose.yml
에는 MySQL 하드코딩된 환경 변수가 있습니다. 우리는 곧 이것을 바꿀 것입니다.Docker용 공식 MySQL 이미지에 대한 자세한 내용은 다음을 참조하세요.
👉 https://hub.docker.com/_/mysql
pdo_mysql 확장 설치
데이터베이스가 준비되었지만 Lumen은
pdo_mysql
확장자가 없으면 데이터베이스에 연결할 수 없습니다. 모든 PHP 확장을 활성화하려면 Dockerfile
에 추가하기만 하면 됩니다.업데이트된 내용은 다음과 같습니다
Dockerfile
.FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo_mysql
WORKDIR /var/www/html/
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
COPY . .
RUN composer install
Docker용 공식 PHP 이미지에 대한 자세한 내용은 다음을 참조하세요.
👉 https://hub.docker.com/_/php
Lumen의 .env 파일 사용
보시다시피
docker-compose.yml
모든 MySQL 환경 변수는 하드코딩되어 있습니다. Lumen의 .env
변수를 docker-compose.yml
에 전달하는 방법은 다음과 같습니다.version: "3.5"
services:
lumen:
ports:
- "8000:8000"
volumes:
- .:/var/www/html
- /var/www/html/vendor/
build: .
command: php -S lumen:8000 -t public
restart: always
depends_on:
- db
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: root
command: mysqld --default-authentication-plugin=mysql_native_password
volumes:
- ./database/mysql-data:/var/lib/mysql:rw
volumes:
mysql-data:
컨테이너를 시작하기 전에 한 가지 더 중요한 단계:
.env
에서 DB_HOST
를 docker-compose.yml
(이 경우 db
)에서 MySQL 서비스 이름으로 설정해야 합니다....
DB_HOST=db #MySQL container name
...
이제 다음을 사용하여 Docker 컨테이너를 실행할 수 있습니다.
docker-compose --env-file .env up --build
Docker에서 환경 변수를 사용하는 방법에 대해 자세히 알아보세요.
👉 https://docs.docker.com/compose/environment-variables/
Facade 클래스 활성화
데이터베이스 연결을 테스트하기 위해 연결 세부 정보를 보유하는
DB
Facade 및 PDO
개체를 사용합니다. Laravel에서 Façade 클래스는 즉시 사용할 수 있지만 Lumen을 사용하면 $app->withFacades();
에서 bootstrap/app.php
옵션의 주석 처리를 제거해야 합니다.데이터베이스 연결 테스트
Facades를 활성화한 후
DB
및 routes/web.php
연결의 PDO 개체에서 dd()
를 사용할 수 있습니다.<?php
/** @var \Laravel\Lumen\Routing\Router $router */
use Illuminate\Support\Facades\DB;
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/
$router->get('/', function () use ($router) {
dd(DB::getPDO());
});
http://localhost:8000으로 이동하여 연결을 지정하는 개체를 가져와야 합니다. 이제 Lumen과 함께 MySQL을 실행하고 있습니다.
다음 부분에서는 Lumen 컨테이너와 상호 작용하고 마이그레이션, 모델, 모델 팩토리 및 데이터베이스 Seeder를 만듭니다.
✍ 더 많은 게시물 보기:
https://yossiabramov.com/
Reference
이 문제에 관하여(Docker를 사용하여 Lumen 및 MySQL 설정 - 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yossiabramov/setting-up-lumen-and-mysql-with-docker-part-ii-2o36텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)