Docker에서 기본 로컬 PHP 개발 환경 설정
Learn to code with our beginner friendly tutorials
만약 당신이 단지 빠르고 더러운 원본 코드를 원한다면, 끝까지 뛰어라.우리는 한 걸음 한 걸음 천천히 이 과정을 완성할 것이다.
선행 조건: Docker 및 Docker compose가 설치되어 있습니다.
첫 번째 단계: 간단한 PHP 스크립트를 가져와서 Dockerfile로 실행합니다.
PHP Docker docs를 보면 Dockercompose 파일에 대한 어떤 내용도 볼 수 없지만, 그들이 제공한 내용을 어떻게 사용하는지 찾을 수 있습니다.처음에 그들은 우리에게 간단한 Dockerfile 설정을 주었다.프로젝트 디렉터리 루트 디렉터리에 있는 Dockerfile에 사용합니다. 저는 제 프로젝트를'php docker'라고 합니다.그리고 내부에서 다음 코드를 사용하여 하나를 만듭니다
Dockerfile
.FROM php:7.4-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]
이 코드는 우리가 사용할 그림을 만드는 설정입니다.이 설정은 명령줄 내용이 있는 PHP 7.4를 도입했습니다.COPY . /usr/src/myapp
현재 디렉터리의 내용을 Docker 컨테이너의/usr/src/myapp에 복사합니다.다음 줄: WORKDIR /usr/src/myapp
/usr/src/myapp을'작업 디렉터리'로 설정하면 cd/to/your/project를 사용하는 것 같습니다.그리고/usr/src/myapp 폴더에서 명령
$ php ./index.php
을 실행합니다.php는 우리의 스크립트입니다.이것은 우리가 PHP 스크립트가 필요하다는 것을 의미한다.다음과 같이 프로젝트 디렉토리에 index.php
파일을 만듭니다.<?php
echo "Hello from the docker container";
이제 docker 이미지를 구축하고 실행하는 데 필요한 지침을 계속 수행할 수 있습니다.$ docker build -t my-php-app .
$ docker run -it --rm --name my-running-app my-php-app
첫 번째 명령은 현재 디렉터리의 내용을 사용하여 컴퓨터에 my php 앱이라는 이미지를 구축합니다.두 번째 명령은'내가 실행하는 응용 프로그램'이라는 용기를 준비했습니다. 이 용기는 우리가 방금 만든'내 php 응용 프로그램'의 그림을 기반으로 합니다. index.php 스크립트를 실행하는 것을 설정합니다. 따라서 우리의 스크립트는 명령줄에서 실행됩니다. 우리는 이러한 결과를 얻어야 합니다.첫 번째 단계 완성!하지만 간단한 PHP 스크립트는 그다지 유용하지 않다.Apache 웹 서버에서 설정합니다.문서를 더 아래로 스크롤하면'이미지 변체'부분을 볼 수 있습니다. 그 중 하나는 php-apache입니다.이 이미지는 PHP와 함께 묶여 있습니다.이렇게 하면 웹 서버에서 스크립트를 쉽게 실행하고 브라우저에 스크립트 결과를 표시할 수 있습니다.다시 한 번, 지시에 따라 조작합시다.dockerfile 없이 Apache/php 이미지를 실행하려면 다음 명령을 실행하십시오. (참고: 첫 번째 줄은 Linux/Mac 사용자, 두 번째 줄은 외로운 Windows 사용자에게 적용됩니다.
docker run -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html php:7.2-apache # This line for *nix users
docker run -d -p 80:80 --name my-apache-php-app -v C:\Users\fastp\Desktop\Code\tutorials\php-docker:/var/www/html php:7.2-apache # For Windows users
이 줄은 기본적으로 용기를 실행하고 이름을"나의apachephp 응용 프로그램-p는 로컬 기기에서 용기의 포트로 설정하는 포트입니다. 왼쪽은 우리의 로컬 포트이고, 오른쪽은 용기의 포트입니다. 그리고 -v 설정 볼륨을 사용하거나... 기본적으로 우리의 현재 작업 디렉터리를/var/www/html 폴더에 연결합니다. 이것은 기본적으로 우리의 현재 디렉터리의 내용을 용기의 html 디렉터리에 넣을 수 있도록 합니다.너의 코드는 안에서 실행할 수 있다.마지막으로, 우리는 그 중에서 구축된 이미지, 즉 php:7.2-apache를 정의했다Windows에는 $PWD 명령이 없으므로 경로를 수동으로 배치해야 실행할 수 있습니다.
알겠습니다. 포트 80에서 실행하도록 스크립트를 설정하고 계속 접근하십시오. http://localhost:80 브라우저에서 스크립트가 실행되는 것을 보실 수 있습니다.
PHP 및 docker 조합
이제 dockercompose 파일로 내용을 이동하기 시작하지만, 먼저 방금 만든 용기를 멈추십시오.컨테이너 id를 가져오고
docker ps
를 실행하려면 $ docker stop container_id
을 실행할 수 있지만, 이 모든 용기를 정지해야 합니다.docker stop $(docker ps -a -q)
이제 프로젝트의 루트 디렉터리에 docker-compose.yml
파일을 만들고 다음 내용을 넣습니다.version: '3.1'
services:
php:
image: php:7.4-apache
ports:
- 80:80
volumes:
- ./src:/var/www/html/
맨 윗줄은 우리가 사용하고 있는 dockercompose의 버전 번호만 설정합니다.그리고 우리는'서비스'를 가지고 있습니다. 이것은 설정할 용기 목록입니다.다른 용기가 이 이름을 통해 연결될 수 있도록 이 용기에'php'라고 명명할 것입니다.'미러링'은 php:7.4-apache가 될 것입니다. (이전의 명령행 실험에서 7.2를 사용했다 하더라도)그리고 명령행 테스트에서처럼 로컬 기기의 80에서 용기의 80으로 포트맵을 설정하고 있습니다.마지막으로, 우리는 우리의 내용을 채울 것이다/src 폴더를containers
/var/www/html
폴더에 넣습니다.이제 스크립트를 가운데로 이동합니다.로컬 기기의 src 폴더입니다.현재 프로젝트 구조는 다음과 같습니다.현재 프로젝트 루트 디렉터리 내부에서 실행
docker-compose up -d
하고 접근localhost:80하여 브라우저에서 실행되는 스크립트를 보십시오.볼륨을 사용하여 코드를 용기에 붙여넣기 때문에, 스크립트를 변경하고 자동으로 업데이트할 수 있어야 합니다.해봐.이제
docker-compose down
로 용기를 닫읍시다.다음 단계는 설정MySQL and Adminer (a DB access tool)이다. 다행히도 그들의 문서가 우리에게 dockercompose 예시를 주었기 때문에 우리는 너무 많이 고려할 필요가 없다.하지만 MySQL에 PHP를 연결하려면 PHP 환경에서 부족한 부분을 설치해야 하기 때문에 설정을 약간 수정해야 합니다.다음은 우리의
docker-compose.yml
파일입니다.# Use root/example user/password credentials
version: '3.1'
services:
php:
build:
context: .
dockerfile: Dockerfile
ports:
- 80:80
volumes:
- ./src:/var/www/html/
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
우리의 PHP 서비스는 보기에 다르다. 왜냐하면 mysqli를 사용하여 PHP를 데이터베이스에 연결하려면 mysqli의 물건을 설치해야 하기 때문이다.이것은 우리가 php7.4-apache 이미지를 사용자 정의하기 위해 Dockerfile를 사용해야 한다는 것을 의미한다.현재 디렉터리 (dot) 의 내용을 사용하고 Dockerfile를 사용하여 그림을 만듭니다.(Dockerfile 이미지 코드는 다음과 같습니다)현재 우리는'db'서비스, 즉 mysql 렌즈를 추가했습니다.그들은 암호와 관련된 이상한 명령을 사용했습니다: -)와 정책을 다시 시작합니다.루트 암호를'example'로 설정하는 환경 변수를 설정했기 때문에 우리는 이런 방식으로 로그인할 것입니다.
그리고 관리자는 관리자 이미지를 얻고 포트 맵을 8080: 8080으로 설정합니다.XAMPP에서localhost/phpmyadmin에 데이터베이스 관리 도구를 가져오는 방법처럼, 음...다음에는localhost:8080으로 이동하여adminerdb 도구에 접근할 수 있습니다.
또한 PHP 컨테이너에서 작업하도록 Mysqli를 설정합니다.이것은 내 Dockerfile 코드입니다.
FROM php:7.4-apache
RUN docker-php-ext-install mysqli
처리해야 할 코드가 많은 거 알아요...우리 한 줄 한 줄 봅시다.첫 번째 줄은 php:7.4-apache 이미지로 용기를 구축합니다.두 번째 줄 실행 명령은 용기에 mysqli 확장을 설치합니다.여기서 우리는 초기본 PHP 개발 환경에 필요한 모든 것을 가지고 있다.다시 실행합시다docker-compose up -d
.이제 관리자를 방문하고 로그인할 수 있어야 합니다.나는 단지 약간의 그림만 사용하여 속도를 높일 것이다.우리가 dockerfile을 기반으로 한 예시에서'서버'의 이름은'db'라는 것을 주의하십시오.우리는 그것을'파'또는 우리가 원하는 모든 것으로 명명할 수 있다.
데이터베이스 만들기 선택
이름을 지정하고save를 누르십시오.나는 나의 이름을 "회사1"이라고 명명했다
그리고 "new item"을 선택하여 테이블에 항목을 추가합니다.
이제 PHP만 데이터베이스에 연결하면 됩니다.이것은 PHP 강좌가 아니기 때문에 나는 전부 설명하지 않겠지만, 그것은 단지 우리의 데이터베이스에 연결되어 조회를 실행하고 화면에 인쇄할 뿐이다.중요한 부분은 MySQL과 PHP를 연결하는 세 번째 줄입니다.
<?php
echo "Hello from the docker yooooo container";
$mysqli = new mysqli("db", "root", "example", "company1");
$sql = "INSERT INTO users (name, fav_color) VALUES('Lil Sneazy', 'Yellow')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Nick Jonas', 'Brown')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Maroon 5', 'Maroon')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Tommy Baker', '043A2B')";
$result = $mysqli->query($sql);
$sql = 'SELECT * FROM users';
if ($result = $mysqli->query($sql)) {
while ($data = $result->fetch_object()) {
$users[] = $data;
}
}
foreach ($users as $user) {
echo "<br>";
echo $user->name . " " . $user->fav_color;
echo "<br>";
}
다음은 브라우저에서 코드를 실행한 결과입니다.볼륨의 지속적인 Mysql 사용:
전체 응용 프로그램을 한꺼번에 구축하지 않을 수도 있기 때문에 데이터베이스에 있는 내용과 같은 지속적인 데이터를 저장하기 위해 볼륨을 사용하고자 합니다.볼륨이 없으면 컨테이너를 멈출 때마다 데이터가 지워집니다.이 점을 하기 위해서, 코드에 몇 줄을 더 추가하기만 하면 됩니다.db:anddown의 코드는 다음과 같다. (중요한 줄은 "db"부분의 끝에 위치하고 그 중에서 볼륨을 표시하며 맨 끝은 볼륨을 표시한다.
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql-data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
volumes:
mysql-data:
눌린 자국에 주의하다.수량은'서비스'와 같은 축소 수준에 있을 것이다.나는 지금 토론권에 깊이 들어가지 않을 것이다.(솔직히 말하면, 나는 아직 전문가가 아니다.) 그러나 이 코드에서, 우리는 우리 시스템에 mysql 데이터라는 볼륨을 설치했다.우리의 모든 데이터베이스 테이블과 쓰레기는 "mysql 데이터"에 저장됩니다.그리고 우리는 이 데이터를 용기에 비추는/var/lib/mysql입니다.
이 차이는 많지 않다. 바로 너희 모두다.만약 당신이 약간의 실천을 하고 싶다면, 당신은 MySQL로 Postgres를 교체해 보아야 합니다.또는 Nginx용 Apache를 사용하거나 Composer와 같은 다른 도구를 Dockerfile로 설치하려고 시도합니다.저에게 이 문장이 유용한지 알려 주세요.내가 이것들을 더욱 잘 할 수 있도록 약간의 피드백을 얻기를 바란다.
소스 코드입니다.
Learn to code with our beginner friendly tutorials
Reference
이 문제에 관하여(Docker에서 기본 로컬 PHP 개발 환경 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/truthseekers/setup-a-basic-local-php-development-environment-in-docker-kod텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)