【초보자라도 아는 Docker 입문】Docker 실천편(Docker Compose를 사용하는 Larevel 환경 구축)



Docker Compose란?



Docker compose는 여러 컨테이너로 구성된 서비스를 구축하고 실행하는 절차를 자동화하고 관리를 용이하게하는 기능입니다. (예 : Laravel이면 응용 프로그램 서버, 웹 서버, 데이터베이스 서버) Docker compose에서는 compose 파일을 준비하고 명령을 한 번 실행하여 해당 파일에서 설정을 읽고 모든 컨테이너 서비스를 시작할 수 있습니다. 수 있습니다.

Docker Compose를 사용할 때까지의 주요 단계



· 각 컨테이너의 Dockerfile을 만듭니다 (이미있는 이미지를 사용하는 경우 필요 없음).
· docker-compose.yml을 작성하고, 각각 독립한 컨테이너의 기동 정의를 실시합니다 (경우에 따라서는 구축 정의도 포함된다)
· "docker-compose up"명령을 실행하여 docker-compose.yml에 정의 된 컨테이너를 시작합니다.

컨테이너 구성



app, web, db의 3개의 컨테이너 구성이 좋다고 생각합니다만 이번은 app와 db의 2개의 컨테이너 구성으로 가고 싶습니다.
docker ───app
           ├──000-default.conf
           ├──Dockerfile
           ├──php.ini
          db
           ├──data
           ├──my.cnf
 src ────
$ mkdir docker-laravel
$ cd docker-laravel

Dockerfile 만들기


FROM php:7.4-apache

ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql


RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

docker-compose.yml 만들기



docker-compose.yml

version: '3'

services:

# ---------------------------------
# laravelを動かすコンテナ
# ---------------------------------
    app:
        ports:
            - "8000:80"
        build: ./docker/app
        container_name: laravel_app

        volumes:
            - ./src:/var/www/html

# ----------------------------------
# MySQLを動かすコンテナ
# ----------------------------------
    db:
        image: mysql:5.7
        container_name: laravel_db

        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: laravel_db
            MYSQL_USER: laravel_user
            MYSQL_PASSWORD: laravel_pass
            TZ: 'Asia/Tokyo'

        command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

        volumes:
            - ./docker/db/data:/var/lib/mysql
            - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
        ports:
        - 3306:3306

기타 파일 설명



000-default.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/laravel/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /var/www/html/laravel/public>
        AllowOverride All
    </Directory>
</VirtualHost>

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

my.cnf
[mysqld]
character-set-server=utf8

1, 이미지 만들기


$ docker-compose build

2, 컨테이너의 기동


$ docker-compose up -d

3, 컨테이너 내에 들어간다


$ docker-compose exec app bash

4, laravel의 프로젝트 작성


# composer create-project --prefer-dist laravel/laravel laravel "6.18.*"
# cd laravel
# chmod 777 -R storage/
# php artisan key:generate

http://localhost:8000/ 로 이동하여 아래 화면이 표시되면 OK입니다.



5, 데이터베이스에 접속하여 migration을 실시한다



.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=laravel_pass

로 설정합니다. 그리고 마이그레이션을 한다.
# php artisan migrate

좋은 웹페이지 즐겨찾기