목표
1. 도커를 제외하고
2. 호스트 머신에 아무것도 설치 하지 않고
3. Laravel 애플리케이션을 빌드할 수 있게 하는 설정
Host Machine Source Code Folder외에
6개의 컨테이너를 갖게 된다.
1. MySQL Database
2. Nginx Web Server
3. PHP Interpreter
Utility 내부
4. npm
5. Laravel Artisan
6. Composer
version: "3.8"
services:
server:
# 텍스트를 따옴표로 묶으면 잘못된 방식으로 해석되지 않아 조금 더 안전하다.
image: 'nginx:stable-alpine'
ports:
- '8000:80'
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
# php:
# mysql:
# composer:
# artisan:
# npm:
php 컨테이너는 비교적 간단
커스텀 Dockerfile 사용
nginx 폴더 근처에 dockerfiles 폴더 추가
dockerfiles 폴더 안에 php.dockerfile 추가
FROM php:8.0-fpm-alpine
WORKDIR /var/www/html
RUN docker-php-ext-install pdo pdo_mysql
여태 쓰던 Dockerfile은 맨 아래 CMD 명령이 있었지만 여기선 CMD나 ENTRYPOINT가 없음
Nginx에서 작성했던 docker-compose.yaml 파일에 php 내용을 추가한다.
php:
build:
context: ./dockerfiles
dockerfile: php.dockerfile
volumes:
- ./src:/var/www/html:delegated
# 3000을 9000으로 매핑하는 경우 필요하다.
# 호스트머신 포트 : 컨테이너 내부 포트
# ports:
# - '3000:9000'
php 컨테이너와 통신하려는 것은 nginx 서버이므로 이름으로 참조하고,
^ 이 경우에 이 포트는 컨테이너에 바로 연결된다.
^ 이것은 로컬 호스트 머신에서 전송하는 경우가 아니므로 주석 처리한 매핑은 아무런 작업도 수행하지 않는다.
대신 nginx.conf 파일의 포트를 9000으로 변경한다.
src 폴더도 만들어 둔다.
mysql:
image: mysql:5.7
env_file:
- ./env/mysql.env
MYSQL_DATABASE=homestead
MYSQL_USER=homestead
MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=secret
Composer 컨테이너는 Laravel에 의해 내부적으로 사용된다.
처음에 Laravel 애플리케이션을 설정하는데 사용할 수 있다.
dockerfiles폴더에 composer.dockerfile 추가한다.
FROM composer:latest
# 코드가 있을 곳
WORKDIR /var/www/html
ENTRYPOINT [ "composer", "--ignore-platform-reqs" ]
composer
: ENTRYPOINT에 composer 파일을 넣은것. composer 실행파일은 composer 이미지와 컨테이너 내부에 존재한다.
--ignore-platform-reqs
: 일부 종속성이 누락되더라도 경고나 오류 없이 실행 할 수 있다.
composer:
build:
context: ./dockerfiles
dockerfile: composer.dockerfile
volumes:
- ./src:/var/www/html
https://laravel.com/docs/9.x
Your First Laravel Project
항목을 참고한다.composer create-project laravel/laravel example-app
$] $] docker-compose run
뒤에 위의 명령어를 쓴다.$] docker-compose run --rm composer create-project laravel/laravel .
.
: 프로젝트가 생성될 폴더를 명령의 끝에 특정한다. WORKDIR /var/www/html
: Laravel 프로젝트가 생성되는 루프 폴더가 된다..env
파일에서 다음 부분을 수정한다. DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
$] docker-compose up server php mysql
입력한다.depends_on
을 추가한다.--build
옵션을 추가한다. $] docker-compose up --build server
artisan:
build:
context: .
dockerfile: dockerfiles/php.dockerfile
volumes:
- ./src:/var/www/html
entrypoint: ["php", "/var/www/html/artisan"]
entrypoint
옵션을 통해 Dockerfile에 아직 entrypoint가 없는 경우 오버라이드 하거나 추가할 수 있다. npm:
image: node:14
working_dir: /var/www/html
entrypoint: ["npm"]
volumes:
- ./src:/var/www/html
$] docker-compose run --rm artisan migrate
입력한다.migrate
: Laravel이 지원하는 artisan 명령 중 하나. 데이터베이스에 데이터를 기록한다. 따라서 데이터베이스 설정이 작동하는지 그 여부도 확인한다.