목차
1. 소개
1.1 Docker를 사용하는 이유는 무엇입니까?
다음으로, zPhal-dockerfiles를 예로 들어 PHP 개발 환경을 설정하는 방법을 소개합니다. 제가 블로그 시스템용으로 준비한 Dockerfile 세트입니다.
다음은 zPhal-dockerfiles를 예로 들어 전체 파일을 볼 수 있습니다.
먼저 살펴보겠습니다. 제가 만든 Dockerfile 프로젝트는 대략 다음과 같은 디렉터리로 나누어져 있습니다.
2.2.1 PHP
다음은 PHP용 Dockerfile입니다.
2.4 编写 docker-compose.yml
3. 使用
3.1 使用搭建好的环境
3.2 使用Composer
4. 注意事项
백엔드 개발 PHP 튜토리얼 Docker를 사용하여 PHP 개발 환경을 구축하는 단계에 대한 자세한 설명

Docker를 사용하여 PHP 개발 환경을 구축하는 단계에 대한 자세한 설명

May 18, 2018 pm 02:26 PM
docker php 단계

이번에는 Docker를 사용하여 PHP 개발 환경을 구축하는 단계에 대해 자세히 설명하겠습니다. notes는 무엇인가요?

1. 소개

1.1 Docker를 사용하는 이유는 무엇입니까?

이러한 시나리오가 있나요? 프로젝트를 진행했는데, 로컬에서 개발할 때 환경을 설정해야 합니다. 회사에 갈 때도 환경을 설정해야 합니다. 비밀리에 놀고 싶다면 환경을 설정해야 합니다. 일치하지 않으면 충분하지 않습니다. 왜냐하면 환경 의존성이 상당히 많기 때문입니다. 이때 Docker가 있다면 머신에 Docker를 설치하고 작성된 Dockerfile을 넣으면 명령 한 줄로 자동 완성되므로 편리하고 효율적이지 않을까요? 1.2 준비

다음으로, zPhal-dockerfiles를 예로 들어 PHP 개발 환경을 설정하는 방법을 소개합니다. 제가 블로그 시스템용으로 준비한 Dockerfile 세트입니다.

이제 Windows, Mac, Linux 등 Docker는 Windows 시스템을 포함하여 매우 잘 지원할 수 있습니다. Win 10 시스템에서 Windows용 Docker는 실제로 꽤 좋지만 더 많은 메모리를 소비합니다.

Docker 명령줄을 통해 이미지 가져오기, 컨테이너 실행, 컨테이너 내 명령 실행 등 많은 작업을 수행할 수 있지만 이제는 Dockerfile을 작성하고 관리하기 위해 더 간단하고 투박한 방법을 사용해야 합니다. docker-compose를 통해 이러한 문서는 작업 프로세스를 단순화합니다.

Dockerfile이란 무엇인가요?

Dockerfile은 일련의 명령과 매개변수로 구성된 스크립트입니다. 이러한 명령은 가져온 기본 이미지에 적용되고 최종적으로 Dockerfile을 통해 설치하려는 항목이 포함된 새 이미지를 생성할 수 있습니다. 소프트웨어는 설치할 확장 프로그램, 실행할 명령 등을 미리 사용자 정의한 다음 한 번의 클릭으로 실행하는 것과 동일하므로 작업 프로세스가 크게 단순화됩니다.

이 문서에 따라 환경을 설정하려면 다음을 수행해야 합니다.

먼저 Docker와 Docker의 일부 기본 작업, 그리고 docker-compose가 무엇인지 이해해야 합니다.

그런 다음 Docker와 docker-compose를 설치해야 합니다. 저는 docker-compose를 사용하여 Dockerfile을 관리하겠습니다.

Dockerfile을 작성하는 것은 죽은 것이 아니라 살아있는 것입니다. 모든 사람이 작성하는 Dockerfile은 필요에 따라 다를 수 있습니다.

Docker 공식 문서는 영어로 되어 있지만 기본적으로 모든 내용이 담겨 있습니다. 궁금한 점이 있으면 Docker Documentation 문서를 참조하는 것이 좋습니다.

2. 쓰기 시작

다음은 zPhal-dockerfiles를 예로 들어 전체 파일을 볼 수 있습니다.

2.1 Preview

먼저 살펴보겠습니다. 제가 만든 Dockerfile 프로젝트는 대략 다음과 같은 디렉터리로 나누어져 있습니다.

zPhal-dockerfiles
app/
 index.php
 phpinfo.php
data/
 .gitignore
files/
 mysql/
 conf.d/
  mysql-file.cnf
 Dockerfile
 nginx/
 conf.d/
  default.conf
  zphal.conf
 Dockerfile
 nginx.conf
 php/
 pkg/
  .gitignore
 Dockerfile
 php.ini
 php-dev.ini
 php-fpm.conf
 redis/
 Dockerfile
 docker-compose.yml
logs/
.gitgnore
README.md
로그인 후 복사

이 프로젝트에서는 PHP, MySQL, Nginx, Redis, Composer, Phalcon Extensions 등을 사용했습니다.

일반적으로 이를 수행하는 세 가지 프로세스가 있습니다. 각 소프트웨어의 Dockerfile을 작성하고,

구성 파일

을 작성하고, 구성 구성 파일을 Dockerfile 파일에 넣어 미러에 빌드하는 것을 포함하여 모든 Dockerfile을 처리합니다. . 2.2 Dockerfile 작성

2.2.1 PHP

다음은 PHP용 Dockerfile입니다.

FROM php:7.2-fpm

MAINTAINER goozp "gzp@goozp.com"

시간대 설정


ENV TZ =Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

종속성 패키지 및 PHP 핵심 확장 업데이트 및 설치

RUN apt-get update && apt-get install -y \
git \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install opcache \
&& docker-php-ext-install mysqli \
&& rm -r /var/lib/apt/lists/*
로그인 후 복사

사전 복사 -호스트에 복사하여 확장 패키지

COPY ./pkg/redis.tgz /home/redis.tgz
COPY ./pkg/cphalcon.tar.gz /home/cphalcon.tar.gz
로그인 후 복사

PECL 확장을 설치합니다. 여기서는 Redis

RUN pecl install /home/redis.tgz && echo "extension=redis.so" > etc/php/conf.d/redis.ini

타사 확장 기능을 설치합니다. 여기에는 Phalcon 확장 기능이 있습니다

RUN cd /home \
&& tar -zxvf cphalcon.tar.gz \
&& mv cphalcon-* phalcon \
&& cd phalcon/build \
&& ./install \
&& echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini
로그인 후 복사

Install Composer

ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH
RUN rm -f /home/redis.tgz \
rm -f /home/cphalcon.tar.gz 
WORKDIR /data
Write Permission
RUN usermod -u 1000 www-data
로그인 후 복사

첫 번째 줄은 기본 이미지를 정의합니다. 여기서는 PHP 7.2의 fpm 버전을 사용합니다. 여기서 두 번째 줄은 유지 관리 담당자를 정의합니다.

다음 단계는 시간대를 정의하는 것입니다. 이 문장은 주로 모든 컨테이너의 시간을 호스트와 동기화하기 위해 정의됩니다. 실제로 docker-composer.yml 파일에서 다음과 같이 정의할 수 있습니다.

services:

php-fpm:

volumes:

- /etc/localtime:/etc/localtime:ro

그러나 Windows와 같은 Linux가 아닌 시스템에서 실행할 때는 /etc/localtime을 얻을 수 없습니다. 호환성 향상 모든 플랫폼에 대해 시간을 Dockerfile에 동기화합니다.

다음으로 몇 가지 확장을 설치합니다. 실제로 확장을 설치하는 과정은 Linux에서 맨손으로 PHP 확장을 설치하는 방법과 유사합니다. php-fpm 이미지에 Composer를 직접 설치했습니다. 실제로 Composer 이미지를 가져와서 실행하는 것도 목적을 달성할 수 있습니다. 왜냐하면 우리는 Composer 명령을 실행하여 패키지를 관리하기 때문입니다. Composer가 별도의 컨테이너인 경우 사용하지 않을 때 컨테이너를 끌 수 있지만 여기서는 Composer를 php-fpm 이미지에 직접 설치했습니다. 주로 내 프로젝트에 일부 PHP 확장이 설치되어 있고 작곡가.json을 작성한 후입니다. 파일을 작성할 때 확장의 종속성을 정의하여 Composer가 실행될 때 환경에 이러한 종속성이 설치되었는지 확인하도록 했습니다. 그래서 Composer 이미지를 직접 사용하는 경우 사용하는 확장도 설치해야 합니다. 이미지는 훨씬 번거롭기 때문에 PHP 이미지에서 직접 했습니다. 실제로는 차이가 없으며 어떻게 사용하느냐에 따라 다릅니다.

2.2.2 Nginx

다음은 Nginx의 Dockerfile입니다.

FROM nginx:1.12

set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc /localtime && echo $TZ > /etc/timezone

시간만 설정하면 훨씬 간단합니다. 따로 설치할 필요가 없기 때문에 공식 이미지를 바로 사용할 수 있습니다.

물론 구성 파일을 수정해야 합니다. 구성 파일을 미리 작성하면 됩니다. 마지막으로 docker-compose.yml 파일에 구성 파일을 넣습니다. 이는 PHP 구성 파일과 MySQL 구성 파일은 모두 동일합니다.

2.2.3 MySQL

다음은 MySQL의 Dockerfile입니다.

FROM mysql:5.7

set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ / etc/ localtime && echo $TZ > /etc/timezone

MySQL에는 특별한 것이 없습니다. 공식 이미지를 사용하세요.

2.2.4 Redis

다음은 Redis이며, 공식 이미지도 직접 사용합니다:

FROM redis:3.2

set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share /zoneinfo/ $TZ /etc/localtime && echo $TZ > /etc/timezone

2.3 구성 파일 작성

구성 파일을 처리하는 방법은 무엇입니까? 구성 파일은 PHP 디렉토리에 저장됩니다. Nginx 구성은 Nginx 디렉터리에 위치하며 conf.d 폴더와 같은 새 하위 폴더를 생성할지 여부는 상황에 따라 다릅니다.

다음은 Nginx 구성 파일을 예로 들어 보겠습니다. 먼저 Nginx 디렉터리는 다음과 같습니다.

nginx/

conf.d/

default.conf

zphal.conf

Dockerfile

nginx.conf

nginx.conf 외에도 모든 도메인 이름 구성 파일을 저장하는 데 사용되는 하위 폴더 conf.d도 있습니다. Linux에서 PHP 환경을 구축한 사람이라면 익숙할 것입니다. 이러한 구성 파일은 당시 컨테이너로 전송할 파일입니다. 호스트에서는 이러한 파일을 사용하지 않습니다.

그래서 가장 중요한 점은 구성 파일에 나타나는 경로가 호스트에 대한 경로가 아니라 컨테이너에 있는 환경에 대한 경로라는 것입니다. 이는 소형 ​​시스템입니다. 경로는 컨테이너 내의 모든 경로입니다. 컨테이너 내에서 마운트하고 통신하여 파일을 동기화할 수 있습니다. 명령줄에서 컨테이너를 시작하려면 파일 경로도 마운트해야 합니다. 이제 이 단계를 해결하기 위해 docker-compose도 사용합니다.

다음은 구성 파일의 예입니다:

server {
listen 80 default;
index index.html index.htm;
server_name localhost docker;
root /data/www;
index index.php index.html index.htm;
location / {
 try_files $uri $uri/ /index.html;
}
location ~ \.php {
 include fastcgi_params;
 fastcgi_pass php-fpm:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name;
}
}
로그인 후 복사

而root /data/www中,/data/www路径,是到时候Nginx容器的路径,而不是当前在操作的宿主机的路径,所以到时候我们要挂载Web程序放的位置到这个路径。

2.4 编写 docker-compose.yml

在PHP、Nginx等目录的同级,我们创建一个docker-compose.yml,我们在执行docker-compose相关命令时,会自动找到这个文件,并根据里面的内容来执行。

接上面Nginx的例子,我们先谈挂载,因为这是最重要的一步。在docker-compose.yml中,Nginx的部分:

build: ./nginx
depends_on:
 - php-fpm
links:
 - php-fpm:php-fpm
volumes:
 - ../app:/data/www:rw
 - ./nginx/conf.d:/etc/nginx/conf.d:ro
 - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
 - ../logs/nginx:/var/log/nginx
ports:
 - "80:80"
 - "8080:8080"
 - "443:443"
restart: always
command: nginx -g 'daemon off;'
로그인 후 복사

有一个volumes参数,这里就是我们要挂载的目录的相关配置,第一条我们将../app挂载到/data/www之中,也是我们配置文件中定义的默认监听的root,而APP目录是我们宿主机中的一个目录,通过这样挂载我们可以直接将我们的项目文件放到APP中,Docker会帮你传输到容器内的/data/www目录下。

其它的参数:

build定义了你的Dockerfile在哪里,如果没有写Dockerfile可以不用build,可以用images参数定义官方镜像,比如image:mysql:5.7;
depends_on表示将依赖其它镜像,比如Nginx依赖php-fpm,没有它我Nginx没法玩;
links定义连接,比如要连接到php-fpm容器,就是php-fpm:php-fpm,后面是别名;
ports表示端口映射,80:80表示将80端口映射到宿主机的80端口;
restart重启,restart: always表示将自动重启;
command是自动执行的命令;
……
参数很多,更多的可以参考官方文档。

下面是一个完整的 docker-compose.yml 文件:

version: '3.2'
services:
php-fpm:
build: ./php/
ports:
 - "9000:9000"
links:
 - mysql-db:mysql-db
 - redis-db:redis-db
volumes:
 - ../app:/data/www:rw
 - ./php/php-dev.ini:/usr/local/etc/php/php.ini:ro
 - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
 - ../logs/php-fpm:/var/log/php-fpm:rw
restart: always
command: php-fpm
nginx:
build: ./nginx
depends_on:
 - php-fpm
links:
 - php-fpm:php-fpm
volumes:
 - ../app:/data/www:rw
 - ./nginx/conf.d:/etc/nginx/conf.d:ro
 - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
 - ../logs/nginx:/var/log/nginx
ports:
 - "80:80"
 - "8080:8080"
 - "443:443"
restart: always
command: nginx -g 'daemon off;'
mysql-db:
 build: ./mysql
 ports:
 - "3306:3306"
 volumes:
 - ../data/mysql:/var/lib/mysql:rw
 - ../logs/mysql:/var/lib/mysql-logs:rw
 - ./mysql/conf.d:/etc/mysql/conf.d:ro
 environment:
 MYSQL_ROOT_PASSWORD: 123456
 MYSQL_DATABASE: zphaldb
 MYSQL_USER: zphal
 MYSQL_PASSWORD: zphal123
 restart: always
 command: "--character-set-server=utf8"
redis-db:
 build: ./redis
 ports:
 - "6379:6379"
 volumes:
 - ../data/redis:/data
 restart: always
로그인 후 복사

3. 使用

这一套编写下来,我们怎么用呢?

3.1 使用搭建好的环境

首先,进入项目Dockerfiles的目录下,这里是files目录:

cd zPhal-dockerfiles/files

wget https://pecl.php.net/get/redis-3.1.6.tgz -O php/pkg/redis.tgz

wget https://codeload.github.com/phalcon/cphalcon/tar.gz/v3.3.1 -O php/pkg/cphalcon.tar.gz
然后下载我们会用到的PHP拓展包。

执行命令:

docker-compose up
Docker会自动通过编写好的docker-compose.yml内容构建镜像,并且启动容器。

如果没问题,下次启动时可以以守护模式启用,所有容器将后台运行:

docker-compose up -d
关闭容器:

可以这样关闭容器并删除服务:

docker-compose down
使用 docker-compose 基本上就这么简单,用stop,start等这些命令来操纵容器服务。而更多的工作是在于编写Dockerfile和docker-compose.yml文件。

3.2 使用Composer

当我们要使用Composer时怎么做呢? 我们已经在php-fpm里安装了Composer。

用docker-compose进行操作:

docker-compose run --rm -w /data/www/zPhal php-fpm composer update
-w /data/www/zPhal为在php-fpm的工作区域,zPhal项目也是挂载在里面,所有我们可以直接在容器里运行Composer。

或者进入宿主机APP目录下用Docker命令:

cd zPhal-dockerfiles/app

docker run -it --rm -v `pwd`:/data/www/ -w /data/www/zPhal files_php-fpm composer update

4. 注意事项

注意挂载路径。
构建失败时,注意容器内是否报错。
加速镜像。如果过程下载镜像很慢,可以使用国内的加速镜像服务。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

LaravelS通过Swoole加速Laravel/Lumen步骤详解

php连接MSsql server方式方法总结

위 내용은 Docker를 사용하여 PHP 개발 환경을 구축하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Docker의 이미지를 업데이트하는 방법 Docker의 이미지를 업데이트하는 방법 Apr 15, 2025 pm 12:03 PM

Docker 이미지를 업데이트하는 단계는 다음과 같습니다. 최신 이미지 태그 가져 오기 새 이미지 특정 태그의 이전 이미지 삭제 (선택 사항) 컨테이너를 다시 시작하십시오 (필요한 경우)

Docker가 컨테이너를 빠져 나가는 방법 Docker가 컨테이너를 빠져 나가는 방법 Apr 15, 2025 pm 12:15 PM

도커 컨테이너를 종료하는 4 가지 명령 사용 Docker Kill & lt; Container_name & gt; 호스트 터미널의 명령 (힘 출구)

Docker의 파일을 외부로 복사하는 방법 Docker의 파일을 외부로 복사하는 방법 Apr 15, 2025 pm 12:12 PM

Docker의 외부 호스트에 파일을 복사하는 방법 : Docker CP 명령 사용 : Docker CP 실행 [옵션] & lt; 컨테이너 경로 & gt; & lt; 호스트 경로 & gt;. 데이터 볼륨 사용 : 호스트에서 디렉토리를 만들고 -V 매개 변수를 사용하여 양방향 파일 동기화를 달성하기 위해 컨테이너를 만들 때 컨테이너에 디렉토리를 장착하십시오.

Docker를 다시 시작하는 방법 Docker를 다시 시작하는 방법 Apr 15, 2025 pm 12:06 PM

Docker 컨테이너를 다시 시작하는 방법 : 컨테이너 ID (Docker PS)를 가져옵니다. 컨테이너 중지 (Docker Stop & lt; container_id & gt;); 컨테이너를 시작하십시오 (Docker start & lt; container_id & gt;); 재시작이 성공했는지 확인하십시오 (Docker PS). 기타 방법 : Docker Compose (Docker-Compose Restart) 또는 Docker API (Docker 문서 참조).

PHP : 서버 측 스크립팅 언어 소개 PHP : 서버 측 스크립팅 언어 소개 Apr 16, 2025 am 12:18 AM

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Docker 프로세스를 보는 방법 Docker 프로세스를 보는 방법 Apr 15, 2025 am 11:48 AM

도커 프로세스보기 방법 : 1. Docker CLI 명령 : Docker PS; 2. Systemd Cli 명령 : SystemCTL 상태 Docker; 3. Docker Compose CLI 명령 : Docker-Compose PS; 4. 프로세스 탐색기 (Windows); 5. /Proc Directory (Linux).

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

See all articles