Mac에서 docker를 통해 PHP 개발 환경 구성
이 글의 내용은 Mac에서 docker를 통해 PHP 개발 환경을 구성하는 내용입니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
Docker 설치
Docker 설치에 대해 on MAC 인터넷에 글이 많아서 여기서는 설명하지 않겠습니다. 참고로 Alibaba Cloud나 Daocloud에서 제공하는 가속기를 사용하는 것이 좋습니다.
이 기사를 읽는 것이 좋습니다: https://blog.csdn.net/jiang_x...
이 기사는 공식 문서의 중국어 번역과 동일합니다.
docker-compose를 사용하여 개발 환경을 구성하십시오.
일반적으로 기본 PHP 개발 환경에는 PHP, PHP-FPM, WEB 서버, MySQL 데이터베이스 및 Redis 또는 memcache와 같은 관련 NoSQL 서비스가 포함됩니다. 저는 주로 docker-compose를 통해 서비스를 구성합니다.
docker-compose란 무엇입니까
docker-compose는 단일 또는 다중 컨테이너 서비스를 포함하는 YAML 파일을 통해 정의된 프로젝트입니다. 일반 구성 파일 이름은 docker-compose.yml입니다.
디렉터리 구조
내가 사용하는 방법은 다음과 같습니다. 서비스 아래에는 서비스를 생성하는 데 필요한 항목이 있습니다. . Dockerfile에서 원하는 이미지 모양을 설명합니다. 사용자 정의 이미지를 생성할 때 일부 구성 파일과 같은 일부 추가 파일을 사용해야 할 수도 있습니다. 일반적으로 이러한 구성 파일은 이미지를 생성할 때 이미지에 복사됩니다.
MySQL
mysql은 데이터 서비스입니다. 먼저 이 서비스에 데이터 볼륨을 추가한 다음, 이 데이터 볼륨을 이 서비스에 사용하고 데이터베이스에서 생성된 데이터를 여기에 넣습니다. 그러면 컨테이너를 삭제하더라도 데이터가 데이터 서비스는 다음 번에 컨테이너를 생성할 때 호스트에도 유지됩니다. 기존 데이터를 계속 사용할 수 있습니다. 볼륨 아래에 mysql이라는 데이터 볼륨을 추가합니다.
volumes: mysql: driver: local
그런 다음 MySQL이라는 서비스를 추가하고 서비스에서 사용하는 이미지를 지정합니다. 또한 이 이미지를 생성하기 위해 생성한 Dockerfile을 사용할 수도 있습니다. 이미지를 사용자 정의하기 위해 이미 만들어진 이미지를 사용할 수도 있습니다. 여기서는 mysql:5.7 이미지를 사용했습니다. 사용할 특정 버전을 설정하는 것이 가장 좋습니다.
이 이미지에는 몇 가지 환경 변수가 있습니다. 서비스를 정의할 때 해당 값을 설정할 수 있습니다. 여기서는 루트 사용자의 비밀번호, 생성할 데이터베이스, 사용자 이름 및 비밀번호를 설정할 수 있습니다. 이 변수의 값을 수정해야 합니다.
mysql 서비스에서는 볼륨을 사용하여 MySQL 데이터 볼륨을 지정했습니다. 마운트 위치는 데이터베이스를 저장하는 기본 위치인 컨테이너의 /var/lib/mysql입니다. MySQL 서비스를 로컬에 설치했고 포트 3306이 사용 중이기 때문에 컨테이너의 3306에 매핑되도록 포트 6306을 지정했습니다.
version: "3"services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "app" MYSQL_USER: "app" MYSQL_PASSWORD: "123456" volumes: - ./services/mysql/data:/var/lib/mysql ports: - "6306:3306"
Test
이제 명령줄 도구에 mysql이라는 서비스가 있습니다. 프로젝트가 있는 디렉터리를 입력하고 실행하세요:
docker-compose up
그런 다음 터미널에서 이미지를 설치하고 컨테이너를 시작하는 과정을 볼 수 있습니다. 그런 다음 다른 명령 터미널을 열고 다음을 실행합니다.
docker-compose exec mysql bash
mysql 컨테이너를 입력한 다음 Enter 데이터베이스 확인:
mysql -uroot -pshow databases; +--------------------+| Database | +--------------------+| information_schema | | app | | mysql | | performance_schema || sys | +--------------------+5 rows in set (0.03 sec)
这个时候我们发现mysql容器已经可用了
php
定义一个解释 php 的服务,我打算自己创建这个服务用的镜像,所以用了 build,而不是 image 。我告诉了 docker 自己要创建的这个镜像要使用的那个 Dockerfile 文件的位置(./services/php/Dockerfile)。
volumes 下面是服务用的数据卷,我把 compose 文件所在目录下的 app 这个目录,挂载到了容器的 /www/html/app 这个位置上了。这样我可以直接修改项目的代码,然后立即看到结果;同时由于本机9000端口被占用,指定9090端口映射到容器的9000端口
php: build: context: ./services/php dockerfile: Dockerfile volumes: - ./app:/www/html/app ports: - "9090:9000"
Dockerfile
构建 php 服务的镜像用的 Dockerfile 是 ./services/php/Dockerfile。FROM,设置了一下这个镜像要基于哪个镜像去创建,我用了 php:7.1-fpm 这个官方提供的镜像。RUN 了几行命令,主要是去安装一些软件包,比如一些额外的 php 扩展。在安装这些扩展之前 ,你需要先安装扩展依赖的一些其它的软件包,这里的 libpng12-dev,libjpeg-dev,就是 gd 这个 php 扩展需要的软件包。然后我又 COPY 了配置文件到镜像里面。
FROM php:7.1-fpm RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev \ && rm -rf /var/lib/apt/lists/* \ && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ && docker-php-ext-install gd mysqli pdo_mysql zip opcache COPY ./config/php.ini /usr/local/etc/php/conf.d/php.ini
php服务中遇到的坑
PHP这个镜像中软件是使用的Debian的源,因为众所周知的缘故会导致镜像安装不成功,如图所示:
这个时候我们就需要更换源了,第一次换成了中科大的源,然后发现不行,第二次更换成了阿里云的源,完美完成镜像安装,修改过后的Dockerfile如下:
FROM php:7.1-fpm RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ && apt-get update && apt-get install -y libpng12-dev libjpeg-dev \ && rm -rf /var/lib/apt/lists/* \ && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ && docker-php-ext-install gd mysqli pdo_mysql zip opcache COPY ./config/php.ini /usr/local/etc/php/conf.d/php.ini
使用sed命令搜索软件源文件,把Debian域名修改为阿里云域名
php.ini
自定义的 php 配置。把你想要的 php 配置放到这个文件里,重新 build 镜像,然后再次启动 php 服务的时候会用新的镜像重新创建容器,这样配置就会生效了。
memory_limit = 256Mpost_max_size = 100Mupload_max_filesize = 100M
Nginx
用 image 指定了要使用的镜像,ports 设置了发布的端口号,让主机上的 8000 对应容器的 80 。depends_on 可以设置服务的依赖,我让 nginx 服务依赖之前定义的 php ,这样会先启动 php ,然后再启动 nginx 。
另外我又用了 volumes 自己设置了一个数据卷,让主机上包含 nginx 配置文件的目录,对应容器里的 nginx 服务的配置文件目录,这样我就可以直接在本机上修改 nginx 的配置文件,然后重新启动一下 nginx 服务,配置就可以生效了。这种方法适用在开发环境上,因为修改了配置不需要重新 build 镜像,在生产环境中,你需要自己 build 这个 nginx 镜像,把想要的配置直接复制到镜像里去。在开发阶段有的时候我们需要查看nginx的日志,然后我配置了日志目录映射到容器,最后一个地址是代码目录
nginx: image: nginx:1.12.2 ports: - "8000:80" depends_on: - php volumes: - ./services/nginx/config:/etc/nginx/conf.d - ./services/nginx/logs:/etc/nginx/logs/ - ./app:/www/html/app
app.conf
./services/nginx/config/app.conf,这是一个最基本的 nginx 配置文件,设置了应用的 root 是在 /www/html/app 这里,我们已经把主机上的 app 目录挂载到了容器里的 /www/html/app 这个地方。
注意这条指令:fastcgi_pass php:9000; 这里的 php 是我们定义的 php 这个服务的名字,在 compose 文件里定义的服务,它们之间可以使用服务的名字相互进行沟通,因为 docker 内置了 DNS 功能。
server { listen 80; server_name localhost; root /www/html/app; # access_log /etc/nginx/logs/app.access.log main; location / { index index.html index.htm index.php; autoindex on; # include /usr/local/etc/nginx/conf.d/php-fpm;# include /usr/local/etc/nginx/conf.d/pathinfo.conf; if (!-e $request_filename) { ###一级目录下 rewrite ^/(.*)$ /index.php/$1 last; ###域名下的二级目录 #rewrite ^/html/(.*)$ /uuabc_home/index.php/$1 last; } } location = /info { allow 127.0.0.1; deny all; } location ~ \.php(.*)$ { # comment try_files $uri =404; to enable pathinfo # try_files $uri =404; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include /etc/nginx/fastcgi_params; } # error_page 404 /404.html; # error_page 403 /403.html;}
启动
经过上面几个步骤,我们已经把PHP开发最基本的搞好了,下面我们准备看下成果。
在 app 目录下创建一个 index.php ,内容是:
<?php phpinfo();
进入到项目下面,执行:
docker-compose up
打开浏览器访问 http://localhost:8000/
,结果如图所示:
连接数据库
在app目录有一个adminer.php文件,这个文件是一个类似于PHPmyadmin的数据库管理工具,比较轻量级,访问http://localhost:8000/adminer.php
,如图所示:
在表单服务器选项中填写mysql,用户名root,密码填写安装MySQL服务时的root密码,然后登陆进去,如图所示:
然后我们就可以愉快的管理数据库了。
요약
이제 기본 PHP 개발 환경이 설치되었습니다. Redis나 Memcache와 같은 서비스를 설치해야 한다면 직접 설치하면 됩니다.
다음은 내 프로젝트의 소스 코드입니다. 도움이 되기를 바랍니다. git 주소: https://github.com/xiaodingchen/docker-lnmp
관련 권장 사항:
Docker를 사용하여 통합된 프로젝트 생성 서비스 lnmp 환경
위 내용은 Mac에서 docker를 통해 PHP 개발 환경 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Docker 이미지 생성 단계 : 빌드 지침이 포함 된 Dockerfile을 작성하십시오. Docker 빌드 명령을 사용하여 터미널에 이미지를 빌드하십시오. Docker 태그 명령을 사용하여 이미지를 태그하고 이름과 태그를 지정하십시오.

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

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

Docker에 이미지를 저장하려면 Docker Commit 명령을 사용하여 지정된 컨테이너의 현재 상태가 포함 된 새 이미지를 만들 수 있습니다. 구문 : Docker Commit [옵션] 컨테이너 ID 이미지 이름. 이미지를 저장소에 저장하려면 Docker Push 명령 인 Syntax : Docker 푸시 이미지 이름 [: tag]을 사용할 수 있습니다. 저장된 이미지를 가져 오려면 Docker Pull 명령 인 Syntax : Docker Pull Image Name [: Tag]을 사용할 수 있습니다.

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

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

단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

Docker 버전을 얻으려면 다음 단계를 수행 할 수 있습니다. Docker 명령 "Docker -version"을 실행하여 클라이언트 및 서버 버전을 볼 수 있습니다. Mac 또는 Windows의 경우 Docker Desktop GUI의 버전 탭 또는 Aff Docker Desktop 메뉴를 통해 버전 정보를 볼 수도 있습니다.
