Docker를 이용해 LEMP(Linux-Nginx-Mysql-Php)서버를 구축해보자.
Docker란 가상화기술을 이용해 Linux컨테이너를 만들고 사용할 수 있도록하는 기술이다. 컨테이너는 가상머신과 마찬가지로 일관성 있고 독립적인 환경에서 시스템을 구축할 수 있을 뿐만 아니라 높은 이식성을 가진다.그렇다면 가상머신과 컨테이너는 어떤 차이를 가질까? 아래의 그림을 보자.

왼쪽이 가상머신, 오른쪽이 도커를 이용한 경우이다.
그림만 보더라도 도커를 이용한 쪽이 더 작고 밀도가 높은 것을 알 수 있다. 가상머신은 Hypervisor가 하드웨어를 가상화하고 그 위에 Guest OS가 올라가는 형식이다. 반면 컨테이너는 필수적인 바이너리만이 올라가고 커널은 호스트와 공유한다. 대체로 컨테이너를 이용한 기술이 크기도 작고 속도도 빠르다.
컨테이너가 가지는 단점도 존재한다.
host의 커널을 공유하기 때문에 컨테이너 하나가 보안이 뚫리면 host의 커널도 위험해질 수 있다.
OS를 다양하게 사용하기 힘들다. 예를 들어 하나의 컨테이너에는 Linux를 다른 하나는 Windows를 설치하는 등의 일을 할 수 없다.
LEMP는 LAMP라는 대표적인 서버운영 소프트웨어 집합의 변형이다.
LAMP
- Linux
- Apache
- Mysql
- Php
Apache 대신 Nginx(엔진엑스라고 발음하기 때문에 'E')를 이용한 서버이다.
Nginx는 오픈소스 웹 서버 프로그램이다.
Apache와 비교해 부하가 적고 빠르다는 장점이 있지만 동적인 컨텐츠를 단독으로 처리하는게 불가능하고 다양한 모듈을 지원하지 않는다는 단점이 존재한다.
오픈소스 관계형 데이터베이스이다.
관계형 데이터베이스란 데이터들이 어떠한 관계에 의해 저장되어 있어 각각 어떻게 관련되어 있는지를 쉽게 파악하고 이해할 수 있도록 구성한 데이터베이스이다.
대표적인 스크립트 언어로 전 세계 수많은 웹 시스템의 기반이 되는 언어이다.
Wordpress는 설치형 블로그의 한 종류이다.
설치형 블로그란 자신의 웹 계정에 직접 '설치'하여 이용할 수 있는 블로그이다. 서비스형 블로그에 비해 구축이나 관리에 난이도가 있지만 입맛대로 자유롭게 설정할 수 있다는 장점이 있다.
Nginx는 브라우저에서 들어오는 요청을 받아 응답한다. 정적 파일일 경우 직접 응답하지만 동적 컨텐츠에 대한 요청은 php-fpm과 같이 php를 처리할 수 있는 프로그램에 전달한다. 이러한 프로그램이 php함수를 처리하고 결과를 HTML형식으로 웹 서버로 다시 전달해준다. 웹 서버는 최종적인 결과를 브라우저로 전송한다.
이 과정에서 Nginx는 Wordpress의 파일의 요청을 받을 것이며 처리해 브라우저로 응답해준다. Wordpress의 데이터들은 적절히 Mysql에 저장된다.