NTLite를 사용하여 업데이트로 Windows 사용자 지정 ISO를 만드는 방법
NTLite를 사용하여 Vultr 시스템과 호환되는 Windows 사용자 지정 ISO를 만드는 방법을 단계별로 설명합니다. 최신 드라이버와 업데이트 통합을 포함한 완벽 가이드.
PHP 응용 프로그램은 일반적으로 웹 서버, 관계형 데이터베이스 시스템 및 언어 인터프리터 자체로 구성됩니다. 이 튜토리얼에서는 docker를 사용하여 전체 PHP 응용 프로그램 스택을 활용합니다. 이것은 Nginx (웹 서버), MySQL (데이터베이스 시스템) 및 PHP 용 컨테이너를 빌드하고 조정하는 심층 튜토리얼입니다.
이 튜토리얼을 위해 데이터베이스에서 도시 목록을 읽고 웹 페이지에 표시하는 간단한 응용 프로그램을 작성하여 기본이지만 작동하는 PHP 응용 프로그램을 시연합니다.
이 안내서는 Docker-CE가 이미 설치되어 있고 최소한 도커에 대한 최소한의 실무 지식이 있다고 가정합니다. 그 문제에 대해서는 다음 자습서를 검토하십시오.
실제 도커 기반 응용 프로그램은 일반적으로 여러 컨테이너로 구성됩니다. 수동으로 관리하면 매우 번거롭고 번거로울 수 있습니다. 그것이 docker-compose가 작동하는 곳입니다. 간단한 yaml
구성 파일을 통해 여러 컨테이너를 관리하는 데 도움이 됩니다.
docker-compose를 설치하십시오.
curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
이 예제에 필요한 모든 파일을 보관할 폴더를 만든 다음 폴더에 만듭니다 cd
. 이제부터는이 디렉토리가 작업 디렉토리이며 모든 명령이이 폴더 내에서 실행되고 모든 경로가 해당 디렉토리를 기준으로합니다. 이 폴더는 나중에로 참조 될 수 있습니다 WORKING_DIR
.
mkdir ~/docker
cd ~/docker
이제 세 개의 폴더를 더 만듭니다.
mkdir php nginx app
이 php
폴더는 사용자 정의 PHP 이미지를 빌드 할 위치이고, nginx
폴더는 사용자 정의 nginx 이미지에 필요한 파일을 보유하며 app
폴더는 샘플 응용 프로그램의 소스 코드와 구성을 넣을 위치입니다.
이 예에서는 php-fpm
Nginx 웹 서버에 연결하는 데 사용 합니다. 우리는 공식적인 PHP 기본 이미지를 사용할 것입니다. 그러나 데이터베이스에 액세스 할 수 있도록 일부 확장을 설치하고 활성화해야합니다. php
폴더 안에 이름이 지정된 파일을 만들고 Dockerfile
다음 내용을 파일에 넣습니다.
FROM php:7.1-fpm-alpine3.4
RUN apk update --no-cache \
&& apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache mysql-dev \
&& docker-php-ext-install pdo pdo_mysql
우리는 공식 PHP 이미지의 알파인 버전을 사용하고 있습니다. 알파인은 훨씬 작은 설치 공간을 제공하여 컨테이너를 대상으로하는 매우 작은 배포판입니다. 또한 docker-php-ext-install
공식 PHP 이미지는이 명령을 사용하여 PHP 확장을 쉽게 설치하고 구성 할 수 있도록이 명령을 제공합니다.
자,하자가 (우리의 내부에서 다음을 실행하여이 도커 이미지를 구축 WORKING_DIR
)
docker build -t vultr-php php/
docker-compose.yml
파일이미 언급했듯이 docker-compose
간단한 구성 파일을 통해 여러 컨테이너를 관리 할 수 있습니다. 이 구성 파일의 이름은 일반적으로 docker-compose.yml
입니다. app
폴더 안에이 파일을 작성하십시오 .
touch app/docker-compose.yml
이제이 파일에 다음 내용을 넣으십시오.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
이 구문을 설명하겠습니다. 먼저, 첫 번째 줄에 유의하십시오.
version: '2'
docker-compose.yml
사용되는 구성 파일 의 버전을 지정합니다 . 다음 줄은 프로비저닝 할 컨테이너 또는 서비스를 지정합니다.
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
모든 서비스에는 services
블록 내부에 특정 키가 있습니다 . 여기에 지정된 이름은 나중에이 특정 컨테이너를 참조하는 데 사용됩니다. 또한 php
구성 내에서 컨테이너를 실행하는 데 사용되는 이미지 (이것은 이전에 빌드 한 이미지)를 정의합니다. 볼륨 매핑도 정의합니다.
volumes:
- ./:/app
이 알려줍니다 docker-compose
(현재 디렉토리를 매핑 할 ./
받는 사람) /app
컨테이너 내부 디렉토리. 마지막 줄 /app
은 컨테이너 내부 의 폴더를 작업 디렉토리로 설정합니다 . 이는 컨테이너 내의 모든 향후 명령이 기본적으로 실행되는 폴더임을 의미합니다.
이제 컨테이너를 오케스트레이션 할 수 있습니다.
cd ~/docker/app
docker-compose up -d
다음 명령을 실행하여 PHP 컨테이너가 실행되었는지 확인할 수 있습니다.
docker ps
여전히 app
폴더 안에는 명령을 사용하여 정의 된 서비스 컨테이너 내에서 명령을 실행할 수 있습니다 docker-compose
.
docker-compose exec [service] [command]
[service]
자리는 서비스 키를 참조. 우리의 경우는이었다 php
. 컨테이너 내에서 명령을 실행하여 PHP 버전을 확인하십시오.
docker-compose exec php php -v
다음과 같은 결과가 나타납니다.
PHP 7.1.14 (cli) (built: Feb 7 2018 00:40:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
PHP 컨테이너와 마찬가지로 웹 서버에 대한 사용자 지정 이미지를 만들어야합니다. 그러나이 경우에는에 대한 구성 만 제공하면 virtual host
됩니다. 당신이 우리의 내부에 있는지 확인 WORKING_DIR
하고을 만들 Dockerfile
내부 nginx
폴더 :
cd ~/docker
touch nginx/Dockerfile
이제 다음 내용을 여기에 넣으십시오 Dockerfile
.
FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
알파인 기반의 기본 Nginx 이미지를 사용하고 있습니다. 이 Docker 파일에서 구성 파일을 응용 프로그램 설정으로 복사하기 만하면됩니다. 이 이미지를 빌드하기 전에 구성 파일을 작성하십시오.
touch nginx/default.conf
이제이 컨텐츠로 채우십시오.
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /app;
index index.php;
#server_name server_domain_or_IP;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
이 fastcgi_pass php:9000
줄에서 우리는 PHP 컨테이너를 구성 파일 의 service
블록 안에있는 이름으로 참조 docker-compose.yml
합니다. 내부적 docker-compose
으로 네트워크를 만들고 정의 된 각 서비스에 서비스 이름을 호스트 이름으로 할당합니다. 이제 Nginx 이미지를 만들 수 있습니다.
docker build -t vultr-nginx nginx/
docker-compose.yml
이제 app/docker-compose.yml
파일을 업데이트 하십시오.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
새로운 서비스 만 추가했습니다. 다음을 제외하고 구성은 거의 동일합니다.
depends_on:
- php
ports:
- 80:80
Nginx 컨테이너가 PHP 서비스를 완전히 초기화해야하는 경우 depends_on
옵션 에서이 요구 사항을 강제 적용합니다 . ports
구성 키는 여기에 우리가 포트 매핑, 컨테이너 포트에 호스트 포트 매핑 80
포트에 호스트에를 80
컨테이너한다.
이제 폴더 index.php
안에 파일을 만들고 app
다음을 넣습니다.
<?php phpinfo();
80
방화벽을 통해 포트 에 액세스 할 수 있는지 확인하고 다음을 실행하십시오.
cd ~/docker/app
docker-compose up -d
다시 한 번 서비스가 작동 중인지 다시 확인하십시오.
docker ps
브라우저를 열고에 액세스하십시오 [vultr-instance-ip]
. 다음을 실행하여 Vultr 인스턴스 IP 주소를 찾을 수 있습니다.
hostname -I
PHP 정보 페이지가 나타납니다.
공식 MySQL 이미지를 사용하면 간단한 환경 변수를 통해 컨테이너를 구성 할 수 있습니다. 이것은 environment
서비스 블록 정의 내부의 옵션 으로 수행 할 수 있습니다 . ~/docker/app/docker-compose.yml
파일을 다음으로 업데이트하십시오 .
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
mysql:
image: mysql:5.7.21
volumes:
- ./:/app
- dbdata:/var/lib/mysql
environment:
- MYSQL_DATABASE=world
- MYSQL_ROOT_PASSWORD=root
working_dir: /app
volumes:
dbdata:
이제 데이터베이스에 대한 새로운 서비스를 정의했습니다. 줄을 확인하십시오 dbdata:/var/lib/mysql
. 이렇게하면 컨테이너의 경로 /var/lib/mysql
가 Docker가 관리하는 영구 볼륨 에 마운트되며 컨테이너를 제거한 후에 데이터베이스 데이터가 유지됩니다. 이 볼륨은 파일 끝에서 볼 수 있듯이 최상위 블록에서 정의해야합니다.
새 구성을 조정하기 전에 샘플 MySQL 데이터베이스를 다운로드하십시오. 공식 MySQL의 문서는 몇 가지 예제 데이터베이스를 제공합니다. 우리는 잘 알려진 세계 데이터베이스를 사용할 것입니다. 이 데이터베이스는 국가 및 도시 목록을 제공합니다. 이 샘플을 다운로드하려면 앱 폴더 내에서 다음을 실행하십시오.
curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz
이제 컨테이너를 조정하십시오.
docker-compose up -d
이미 알고 있듯이이 docker-compose up
명령은 아직 시작되지 않은 컨테이너 만 시작합니다. docker-compose.yml
파일과 현재 실행중인 컨테이너 구성의 차이점을 확인합니다 .
한 번 더, MySQL 컨테이너가 시작되었는지 확인하십시오.
docker ps
이제 세계 데이터베이스를 채 웁니다.
docker-compose exec -T mysql mysql -uroot -proot world < world.sql
데이터베이스에서 직접 데이터를 선택하여 데이터베이스가 채워 졌는지 확인할 수 있습니다. 먼저 컨테이너 내부의 MySQL 프롬프트에 액세스하십시오.
docker-compose exec mysql mysql -uroot -proot world
MySQL 프롬프트에서 다음을 실행하십시오.
select * from city limit 10;
도시 목록이 나타납니다. 이제 MySQL 프롬프트를 종료하십시오.
mysql> exit
필요한 모든 컨테이너가 작동하고 실행되었으므로 샘플 애플리케이션에 집중할 수 있습니다. app/index.php
파일을 다음으로 업데이트하십시오 .
<?php
$pdo = new PDO('mysql:host=mysql;dbname=world;charset=utf8', 'root', 'root');
$stmt = $pdo->prepare("
select city.Name, city.District, country.Name as Country, city.Population
from city
left join country on city.CountryCode = country.Code
order by Population desc
limit 10
");
$stmt->execute();
$cities = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Vultr Rocks!</title>
</head>
<body>
<h2>Most Populous Cities In The World</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Country</th>
<th>District</th>
<th>Population</th>
</tr>
</thead>
<tbody>
<?php foreach($cities as $city): ?>
<tr>
<td><?=$city['Name']?></td>
<td><?=$city['Country']?></td>
<td><?=$city['District']?></td>
<td><?=number_format($city['Population'], 0)?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</body>
</html>
[vultr-instance-ip]
웹 브라우저에서 액세스 하면 세계에서 가장 인구가 많은 도시 목록이 표시됩니다. 축하합니다. docker를 사용하여 완전히 작동하는 PHP 응용 프로그램을 배포했습니다.
이 튜토리얼에서는 완전히 작동하는 PHP 응용 프로그램을 구성하는 방법을 단계별로 설명했습니다. 우리는 PHP와 Nginx를위한 커스텀 이미지를 만들고 컨테이너를 조정하기 위해 docker-compose를 구성했습니다. 매우 기본적이고 단순하지만이 설정은 실제 시나리오를 반영합니다.
이 가이드에서는 이미지를 로컬에 구축하고 태그를 지정했습니다. 보다 유연한 설정을 위해 이러한 이미지를 도커 레지스트리 로 푸시 할 수 있습니다 . 공식 도커 레지스트리로 푸시 하거나 자체 도커 레지스트리를 설정할 수도 있습니다. 어쨌든 한 호스트에서 이미지를 빌드하고 다른 호스트에서 이미지를 사용할 수 있습니다.
보다 자세한 사용법은 공식 문서를docker-compose
참조하십시오 .
응용 프로그램 요구 사항과 사용하는 PHP 프레임 워크에 따라 더 많은 확장을 추가 할 수 있습니다. Dockerfile
사용자 정의 PHP 이미지를 빌드 하는 데 사용되는 것을 수정하여 쉽게 수행 할 수 있습니다 . 그러나 일부 확장은 컨테이너에 추가 종속성을 설치해야합니다. 각 확장의 기본 요구 사항을 검토하려면 PHP 공식 문서 에서 확장 목록을 참조해야 합니다.
NTLite를 사용하여 Vultr 시스템과 호환되는 Windows 사용자 지정 ISO를 만드는 방법을 단계별로 설명합니다. 최신 드라이버와 업데이트 통합을 포함한 완벽 가이드.
Vultr BGP 설정을 위한 단계별 튜토리얼. ASN 할당부터 IP 라우팅 구성, BIRD 데몬 설정, FreeBSD 특이사항 및 실전 문제 해결 팁 7가지 포함한 최종 가이드
WebDAV (Web Distributed Authoring and Versioning)를 이용한 원격 파일 작성을 위한 프레임워크로, WsgiDAV 설치 및 구성 방법을 안내합니다.
Mailcow는 DoveCot, Postfix 및 기타 여러 오픈 소스 패키지를 기반으로 하는 경량 메일 서버입니다. 데비안에서 Mailcow 설치 방법을 안내합니다.
랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.
오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.
Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능
인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.
최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.
빅데이터의 13가지 상용 데이터 추출 도구