Skip to content

Latest commit

 

History

History
159 lines (132 loc) · 4.85 KB

README.md

File metadata and controls

159 lines (132 loc) · 4.85 KB

Docker Pulls

PHP 개발을 위한 Docker

PHP 공식 Docker가 제공되지만, 별도 php extension가 필요하면, dockerFile를 만들고 build를 해야하는 번거로움이 있습니다. webtatic 과 remi repo에서 제공하는 패키지를 거의 모두 설치한 Docker Image를 만들게 되었습니다.

Apache + PHP 구동 방법. 간단 버전

$ docker run -d -p 80 -v $(pwd):/var/www/html ngleader/docker-base:centos7-remi-php71

-p 80 으로 구동한 경우, container의 80 port를 host의 random port와 연결되고 docker ps로 나온 0.0.0.0:xxxxx->80를 브라우져에서 http://127.0.0.1:xxxxx로 접속이 가능합니다. 또는 host port를 8080으로 지정하여 -p 8080:80 구동이 가능합니다.

docker images

  • ngleader/docker-base:centos7-remi-php71
  • ngleader/docker-base:centos6-remi-php71
  • ngleader/docker-base:centos7-webtatic-php71
  • ngleader/docker-base:centos7-webtatic-php70
  • ngleader/docker-base:centos6-webtatic-php70
  • ngleader/docker-base:centos7-webtatic-php56
  • ngleader/docker-base:centos6-webtatic-php56
  • ngleader/docker-base:centos7-remi-php56
  • ngleader/docker-base:centos6-remi-php56

Config 수정

container 내부의 설정파일을 host로 옮겨, 수정하여 구동이 가능합니다. 즉, php와 httpd config인 php.ini와 php.d/*.ini, httpd.conf 파일 수정하여 container를 구동이 가능합니다.

dummy container에서 config files 복사

$ docker run -d --name dummy ngleader/docker-base:centos7-webtatic-php56
$ docker cp dummy:/etc/php.ini .
$ docker cp dummy:/etc/php.d .
$ docker cp dummy:/etc/httpd/conf/httpd.conf .
$ docker cp dummy:/etc/httpd/conf.d .
$ docker stop dummy 
$ docker rm dummy
  • 단, remi package인 경우 path가 다르니 phpinfo() 또는 Container 안으로 접속하기 로 확인이 필요합니다.

config가 반영된 새로운 container 구동

$ docker run -d -p 8080:80 \
    -v $(pwd)/html:/var/www/html \
    -v $(pwd)/php.ini:/etc/php.ini \
    -v $(pwd)/php.d:/etc/php.d \
    -v $(pwd)/logs:/etc/httpd/logs \
    ngleader/docker-base:centos7-webtatic-php56

Container 안으로 접속하기

$ docker exec -it {container id} /bin/bash

PHP-CLI

host에 php설치 없이, docker를 이용하여 php-cli를 실행하는 방법

php70

아래 내용으로 각 파일 저장 후 $ chmod +x php70 와 같이 실행 권한을 추가하여 사용

#!/bin/bash
docker run -it --rm -v $(pwd):/var/www/html -w /var/www/html --entrypoint=php ngleader/docker-base:centos7-webtatic-php70 $@
$ ./php70 --version

composer

#!/bin/bash
docker run -it --rm -v $(pwd):/var/www/html -w /var/www/html --entrypoint=composer ngleader/docker-base:centos7-webtatic-php70 $@

phpunit

#!/bin/bash
docker run -it --rm -v $(pwd):/var/www/html -w /var/www/html --entrypoint=phpunit ngleader/docker-base:centos7-webtatic-php70 $@

MySQL 등의 Container와 함께 구동하기

docker 버전

$ docker run -d --name mysql -p 3306 \
    -v $(pwd)/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=web \
    -e MYSQL_USER=web \
    -e MYSQL_PASSWORD=web\
    mysql:5.7
$ docker run -d -p 8080:80 \
    --link mysql:mysql \
    -v $(pwd)/html:/var/www/html \
    ngleader/docker-base:centos6-webtatic-php56

docker-compose 버전

아래 내용을 docker-compose.yml 로 저장 후 $ docker-compose up -d

version: '2'

services:
  web:
    image: ngleader/docker-base:centos7-webtatic-php70
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
      - ./logs:/etc/httpd/logs
      - ./php.ini:/etc/php.ini
    restart: always
    depends_on:
      - db
      - memcached
  db:
    image: mysql:5.7
    ports:
      - "3306"
    volumes:
      - ./data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: web
      MYSQL_USER: web
      MYSQL_PASSWORD: web
  memcached:
    image: memcached:1.4
    restart: always

Debugging with Xdebug and PHPStorm

위 Config 변경방법을 통해 /etc/php.d/xdebug.ini 에 두 줄 추가

xdebug.remote_enable=on
xdebug.remote_autostart=off

Container 구동, # HOST IP #ifconfig 툴 등으로 IP를, # HOST NAME #에는 브라우져에서 접속한 도메인 명을 입력

$ docker run -d -p 80 \ 
    -v $(pwd):/var/www/html \
    -v $(pwd)/php.d:/etc/php.d \
    -e XDEBUG_CONFIG="remote_host=# HOST IP #" \
    -e PHP_IDE_CONFIG="serverName=# HOST NAME #" \
    ngleader/docker-base:centos7-webtatic-php70

PHPStorm 에서 Preferences > Languages & Frameworks > PHP > Servers 에서 + 추가시 Host 항목에 위의 # HOST NAME # 입력

PHPStorm 툴바에서 전화기 모양의 Start Listening for PHP Debuging Connections 클릭