우분투 20.04에서 PHP 7.4와 Apache 2.4 Docker 설치 가이드
목차
우분투 20.04에서 PHP 7.4와 아파치2 웹서버를 설치하는 방법을 안내 합니다. 이 가이드에는 ioncube 모듈 및 php-mysql php-pear php-mbstring php-curl php-gd php-imagick php-xmlrpc php-geoip php-zip php-soap php-memcache php-redis 모듈을 포함합니다.
이 문서에 안내된 파일은 github 레포지토리에도 공개되어 있습니다. github 레포지토리도 참고 해 주세요.
완성된 Docker 이미지는 아래의 도커 허브를 방분 해 주세요.
Dockerfile 만들기
도커에서 사용할 기본 베이스를 우분투 20.04로 설정 합니다.
FROM ubuntu:20.04
APT 저장소를 업데이트 및 업그레이드를 합니다.
RUN apt-get update -y
RUN apt-get upgrade -y
한국 시간을 사용하기 위해 우분투의 타임존관련 패키지 설치 및 타임존을 Asia/Seoul
로 변경 합니다.
RUN apt-get install -y tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
기본 우분투 패키지를 설치 합니다.
RUN apt-get install -y gcc make telnet whois vim git gettext cron mariadb-client iputils-ping net-tools wget
Apache, PHP 및 PHP의 확장 패키지를 설치 합니다.
RUN apt-get install -y apache2 apache2-utils
RUN apt-get install -y php php-dev libapache2-mod-php composer
RUN apt-get install -y php-mysql php-pear php-mbstring php-curl php-gd php-imagick php-xmlrpc php-geoip php-zip php-soap php-memcache php-redis
PHP Mime관련 라이브러리를 설치 합니다.
RUN pear install MIME_Type
아파치 SSL을 설정하기 위해 ssl enable및 기본 인증서를 설치 합니다.
RUN mkdir /etc/apache2/ssl
RUN openssl genrsa -out /etc/apache2/ssl/server.key 2048
RUN openssl req -new -days 365 -key /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.csr -subj "/C=KR/ST=Daejeon/L=Daejeon/O=Docker/OU=IT Department/CN=localhost"
RUN openssl x509 -req -days 365 -in /etc/apache2/ssl/server.csr -signkey /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt
RUN sed 's//etc/ssl/certs/ssl-cert-snakeoil.pem//etc/apache2/ssl/server.crt/g' /etc/apache2/sites-available/default-ssl.conf > /etc/apache2/sites-available/default-ssl.conf.tmp
RUN sed 's//etc/ssl/private/ssl-cert-snakeoil.key//etc/apache2/ssl/server.key/g' /etc/apache2/sites-available/default-ssl.conf.tmp > /etc/apache2/sites-enabled/000-default-ssl.conf
RUN rm /etc/apache2/sites-available/default-ssl.conf.tmp -f
아파치에서 사용할 모듈을 enable합니다.
RUN a2enmod ssl
RUN a2enmod cache
RUN a2enmod cache_disk
RUN a2enmod expires
RUN a2enmod headers
RUN a2enmod rewrite
Apache 기본 index.html를 삭제 후, phpinfo()가 포함된 index.php를 복사 합니다. index.php파일은 github 레포지토리를 참고 해 주세요.
RUN rm /var/www/html/index.html
COPY index.php /var/www/html/index.php
Apache에서 사용할 http 및 https의 설정파일을 복사 합니다. 이 설정 파일은 github 레포지토리(000-default.conf, 000-default-ssl.conf)를 참고 해 주세요.
COPY default.conf /etc/apache2/sites-enabled/000-default.conf
COPY default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
이온큐브(IonCube)모듈을 설치 합니다.
RUN mkdir /root/tmp
RUN cd /root/tmp
RUN wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz -O /root/tmp/ioncube_loaders_lin_x86-64.tar.gz
RUN tar -zxvf /root/tmp/ioncube_loaders_lin_x86-64.tar.gz -C /root/tmp
RUN cp /root/tmp/ioncube/ioncube_loader_lin_7.4.so /usr/lib/php/20190902
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/apache2/php.ini
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/cli/php.ini
Cron데몬과 Apache 서버를 실행 합니다.
RUN echo 'service cron start
/usr/sbin/apachectl -D FOREGROUND' > /entrypoint.sh
Work 디렉토리, 볼륨, 포트 및 Entrypoint 스크립트를 설정합니다.
WORKDIR /var/www/html
VOLUME ["/var/www/html"]
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
Dockerfile 빌드
다음 명령어를 입력해 dockerfile을 빌드 합니다. 빌드된 이미지는 webserver 이름으로 저장됩니다.
$ docker build -t webserver . && docker run -it --rm -p 80:80 -p 443:443 webserver
빌드가 완료되면 정상적인 테스트를 위해 다음 명령어를 입력 하세요.
$ docker run -it --rm -p 80:80 -p 443:443 webserver
정상적으로 실행되면 웹브라우저에서 http://127.0.0.1
로 접속합니다. Docker 이미지 빌드에 문제가 없으면 아래와 같이 phpinfo가 출력 됩니다.
이제 콘솔에서 Ctrl+C 를 클릭하면 서버가 종료되고 테스트를 위해 실행했던 컨테이너는 자동으로 삭제 됩니다.
Docker 컨테이너
다음 명령어로 생성된 도커 이미지로 실행 합니다. 웹서버 포트는 80과 443(SSL), 볼륨은 Host 디렉토리를 도커이미지의 /var/www/html
에 맵핑합니다. --name옵션으로 컨테이너 이미지의 이름을 설정 합니다.
$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver webserver
만약, 위의 Docker Build 과정을 건너뛰고 필자가 직접 제작해둔 Docker Image를 사용하여 컨테이너를 실행 할 수 있습니다. 이 경우 다음 명령어로 Docker Container를 실행 합니다.
$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver dadyzeus/webserver:ubuntu20.04-php7.4-apache
안정적이고 저렴한 가상 서버(VPS) 안내
안정적인 서버 호스팅을 찾고 계신가요? 지금 Vultr 호스팅을 한번 이용 해 보세요. 지금 보고 계신 HaruLogs 사이트도 Vultr에서 VPS 호스팅 하고 있습니다. 한국, 일본, 미국등 다양한 국가에 클릭 몇번으로 안정적이고 저렴한 VPS를 운영 할 수 있습니다.
아래 배너를 통해 회원 가입을 하시면 100달러의 무료 크레딧을 받을 수 있습니다. 100달러의 무료 크레딧은 Vultr의 최소 사양 VPS를 20대 동시 운영가능한 크레딧입니다.
Vultr 서비스 요약
- VPS
- 인스턴스
- AMD 또는 Intel High Performance 인스턴스 최저 $6 - 1vCPU, 1GB Memory, 2TB Bandwidth, 25GB NVMe
- 엣지
- 인스턴스
- Block Storage
- Object Storage (AWS S3 호환)
- Firewall
- Network
- Load Balancers
- Kubernetes
- Databases