PHP 코드를 도커로 패키징해 공유 할 때 사용한 코드이다
Dockerfile
// 베이스 이미지 PHP 8.0 버전 아파치 이미지 사용
FROM php:8.2-apache
// 필요한 PHP 확장 설치
RUN docker-php-ext-install mysqli pdo pdo_mysql
// 현재 디렉토리에 있는 파일을 컨테이너의 /var/www/html 경로로 복사
COPY . /var/www/html
// 80번 포트를 연다
EXPOSE 80
FROM [설치할 이미지 파일]
: 기반이 될 이미지(ex.OS)를 지정한다
RUN [설치한 이미지 파일 위에서 작동시킬 명령어]
: FROM 기반 이미지 위에 실행될 명령어
COPY [파일 이름] [복사할 컨테이너 내 경로]
: 도커 컨테이너의 경로로 파일을 복사한다
EXPOSE [호스트와 연결할 포트]
: 연결할 포트 번호를 명시한다
++
docker-php-ext-install
: 도커 컨테이너 내에서 PHP 확장 모듈을 설치하는데 사용되는 도구이다
docker-php-ext-install pdo
:PHP 확장 모듈인 PDO를 설치한다
Docker 환경에서 PHP 애플리케이션을 구축할 때, 데이터베이스 연결 기능을 사용하려면 PDO를 설치해야 한다
docker-php-ext-install pdo pdo_mysql
: PHP 애플리케이션이 MySQL 데이터베이스에 연결할 수 있도록 한다
Docker-compose.yml
services:
websever:
build: .
ports:
- "8080:80"
volumes:
- .:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
MYSQL_DATABASE: 'vulnerable_db'
restart: always
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "5000:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: 'root'
depends_on:
- db
해석
services: //생성될 컨테이너들을 묶어 놓은 단위
websever:
build: . // 현재 디렉토리(.)에 있는 Dockerfile를 실행한다
ports:
- "8080:80" // localhost는 8080포트, docker는 80포트를 사용한다
volumes:
- .:/var/www/html // 현재 디렉토리(.)에 있는 파일을 컨테이너의 /var/www/html 경로에 실시간으로 연결해준다
depends_on:
- db // db 컨테이너 먼저 실행한 뒤 실행한다
db:
image: mysql:8.0 // mysql 8.0 버전을 사용한다
environment: // 환경 변수를 정의한다
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
MYSQL_DATABASE: 'vulnerable_db'
restart: always // 컨테이너가 종료돼도 서비스가 끊기지 않게 한다
phpmyadmin:
image: phpmyadmin/phpmyadmin // 도커 허브에 있는 공식 phpmyadmin 이미지를 사용한다
ports: // localhost는 5000번, docker는 80번 포트를 사용한다
- "5000:80"
environment:
PMA_HOST: db // phpmyamdin이 db 컨테이너에 있는 데이터베이스 서버에 접속한다는 의미이다
MYSQL_ROOT_PASSWORD: 'root'
depends_on:
- db
webservices 컨테이너
build
: 도커 이미지를 빌드하는 방법을 지정한다
ports
: 호스트와 도커 컨테이너 간에 포트를 매핑한다(연결한다)
volums
: 파일를 공유한다 (바인드 마운트)
depends on
: 명시된 컨테이너가 먼저 실행되고 실행된다
++
바인드 마운트
: 호스트 시스템의 파일 또는 디렉토리가 컨테이너에 마운트되면, 파일 또는 디렉토리는 호스트의 전체 경로(절대 경로)로 지정되어야 한다
마운트
: 운영 체제에서 파일 시스템을 특정 디렉토리에 연결하는 과정을 의미한다
docker에서는 호스트 시스템의 디렉토리나 파일을 컨테이너 내의 특정 경로에 연결하는 것을 의미한다
컨테이너는 호스트 시스템의 파일이나 디렉토리를 자신의 파일 시스템의 일부처럼 사용할 수 있다
/var/www/html
: 웹 서버의 기본 문서 루트 경로, 웹 서버에 접속했을 때 사용자에게 보여지는 웹 페이지 파일들이 위치하는 곳
→ 여기에 파일이 있어야 브라우저를 통해 접근할 수 있다
db 컨테이너
image
: 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정한다, 만일 이미지가 도커에 존재하지 않으면 도커 허브에서 자동으로 내려받는다
environment
: 환경 변수를 정의하는 부분이다
restart
: 컨테이너가 종료되었을때 재시작 정책을 정의한다
phpmyadmin 컨테이너
PMA_HOST
: phpmyadmin 컨테이너가 MYSQL 또는 MariaDB 서버에 연결할 때 사용하는 호스트 이름을 지정한다
++
depends_on : db
(db 컨테이너의 데이터베이스를 이용하여 phpmyadmin을 실행하기 때문이다)
'Linux' 카테고리의 다른 글
| [GCP] VM 인스턴스에 docker 설치하기 (1) | 2025.08.11 |
|---|---|
| [GCP] 구글 클라우드 무료로 초기 설정하기 (3) | 2025.08.11 |
| 리눅스 관리 권한 체계 및 /etc/passwd 와 /etc/shadow (0) | 2025.05.23 |
| bandit 7~14 level 풀이 (0) | 2025.05.17 |
| bandit 0~7 level 풀이 (0) | 2025.05.17 |