Docker
Docker를 사용하여 Laravel 환경 구축하기
- Laravel Valet을 사용하여 개발 진행하던 중, 문득 Docker를 사용해 보고 싶어서 정리하며 만들어본다.
- Docker-compose 를 사용하여 nginx / mysql / app 각 컨테이너를 만든 후 한개의 컨테이너로 묶어 사용한다.
파일트리
- laravel_docker
- .env
- Dockerfile
- application
- laravel source
- docker-compose.yml
- nginx
- nginx.conf
- laravel.conf
- nginx.conf
docker-composer.yml
docker-compose 명령어를 사용하면 docker-compose.yml 파일을 읽어 처리한다.
version: "3.7"
services:
#Laravel App
app:
build:
args:
user: mingyukim #로컬개발환경에서 echo $USER
uid: 501 #로컬개발환경에서 echo $UID
context: ./
dockerfile: Dockerfile # 도커파일을 참조한다
image: laravel-app
restart: unless-stopped
working_dir: /var/www/ #워킹디렉토리 설정
volumes:
- ./:/var/www #볼륨마운트 설정
networks:
- mynetwork
#Nginx Service
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- 8000:80 #80포트는 valet사용중임으로 8000:80 포트바인딩 해줌
volumes:
- ./:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d/
networks:
- mynetwork
#Mysl Service
db:
image: mysql:5.7
restart: unless-stopped
ports:
- 3307:3306 #로컬에서 3306 사용중이기 떄문에 포트바인딩해줌
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
Dockerfile
docker-compose.yml 파일의 app build시 구동하는 dockerfile로 php7.4-fpm 및 기본적인 프로그램을 설치해준다.
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user
.env
docker-compose.yml의 db 및 APP 관련 값 셋팅
APP_NAME=Laravel
APP_ENV=local
APP_KEY= #라라벨 프로젝트 생성 후 .env파일의 App_KEY값 만들고 넣어주면 될듯
APP_DEBUG=true
APP_URL=http://localhost:8000 #위에서 설정한 port바인딩 입력
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=mingyu
DB_PASSWORD=abcd1234
docker-compose up -d --build 실행
docker-compose up -d --build 명령어를 사용하여 위에서 작성한 도커내용을 컨테이너화 시킨다.
$ docker-compose up -d --build
# 위 파일들을 수정하게 됬을 경우 번거롭게 컨테이너 이미지 지우지 말고 --force-recreate 옵션을 활용
$ docker-compose up -d --build --force-recreate
application 폴더 밑에 라라벨 프로젝트 생성
위 명령어를 통해 도커 컨테이너가 정상으로 작동한다면, application 폴더 밑에 라라벨 프로젝트를 생성해준다.
$ docker-compose exec app composer create-project laravel/laravel --prefer-dist application
그 후 application 폴더로 이동하여 .env에 app_key값을 확인 후, 없으면 만들고 있으면 laravel_docker 폴더의 .env에 넣어준다.
# laravel프로젝트의 APP_KEY값 확인하기
$ cd application
$ cat .env | grep ^APP_KEY
# 있다면 상위폴더의 .env의 APP_KEY에 넣어주기
# 없다면 생성하고 넣어주기
$ php artisan key:generate
nginx/conf.d/xxx.conf 만들기
# nginx/conf.d폴더 생성
$ mkdir -p nginx/{conf.d}
#본인은 laravel.conf 생성함
$ vi nginx/conf.d/laravel.conf
#laravel.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/application/public; #마운트된 볼륨 속 라라벨 프로젝트 설정
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
라라벨 프로젝트 .env 설정
application 폴더 밑의 라라벨 프로젝트의 .env를 자신의 개발환경에 맞게 설정하기
drwxr-xr-x 3 mingyukim staff 96B 2 24 15:28 conf.d
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:+QEC4B/42U1jzW9o5ytBPaKjIZCxoMPdciMuP+a7qGw=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=db # 위에 설정한 .env의 DB_HOST 넣어주기
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=mingyu # 위에 설정한 .env의 DB_USERNAME 넣어주기
DB_PASSWORD=abcd1234 # 위에 설정한 .env의 DB_PASSWORD 넣어주기
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
마무리
localhost:8000으로 접속하면 라라벨 프로젝트가 잘 뜨는것을 확인 할 수 있다.
관련글
1.GitHub : https://github.com/MingyuRomeoKim/laravel_docker/tree/master
2.참고URL : https://maruan.medium.com/how-to-install-and-set-up-laravel-8-with-docker-compose-on-ubuntu-20-04-58149fed3e2e
'Docker' 카테고리의 다른 글
[Chat GPT] GPT가 만든 PHP, Nginx, Mysql, Mongo, Redis 웹 환경 도커 셋팅 (2) | 2023.02.20 |
---|