카테고리 글 목록: Linux

[튜토리얼] 도커 Docker 로 논리적으로 구분된 PHP 작업 공간 만들기

지난 포스트를 보고 좀 더 쉬운 튜토리얼이 있었으면 좋겠다는 요청이 있어서 별도의 포스트로 발행해봅니다.

목차

  1. 현재 PHP 환경 확인하기
  2. 도커 설치
  3. 이미지 내려받기
  4. 컨테이너 생성/실행
  5. 컨테이너에 작업 디렉토리 연결하기
  6. Hello, Docker

현재 개발 환경 확인하기

이 부분은 크게 중요하진 않습니다.
도커를 이용한다면 현재 호스트 환경에 PHP가 없더라도 크게 상관이 없기 때문입니다.

간단한 파일을 하나 만들어서 현재 PHP 버전을 확인해봅니다.

웹서버에서 현재 PHP 버전을 확인합니다.

현재 PHP 버전은 7.1.14 버전입니다.

도커 설치

도커 CE 버전을 설치합니다.

https://docs.docker.com/docker-for-mac/install
https://docs.docker.com/docker-for-windows/install
https://docs.docker.com/install/linux/docker-ce/ubuntu
…등등 운영체제에 맞는 버전을 설치합니다.

윈도나 맥의 경우 인스톨러로 제공이 되고, 리눅스의 경우 저장소를 통해 설치하게 됩니다.

이미지 내려받기

도커는 도커 허브 Docker Hub 라는 커뮤니티를 통해 도커 사용자들이 공유한 여러 이미지를 쉽게 조회하고 내려받을 수 있게 되어 있습니다.
주요 운영체제들은 공식 벤더도 있고, 우분투도 그 중 하나죠.(https://hub.docker.com/r/_/ubuntu/)

운영체제만 설치해서 프로그램을 하나씩 세팅할 수도 있지만, 미리 세팅이 다 되어있는 이미지를 받을 수도 있습니다. 예를 들어 HVVM 위에 PHP를 구동하고 싶다면 Ubuntu에 HVVM이 세팅된 이미지를 내려받아 사용할 수도 있습니다.(https://hub.docker.com/r/hhvm/hhvm/) 리눅스에 APM이 세팅된 LAMP Stack 이미지들도 있고 (https://hub.docker.com/r/linode/lamp/) 아파치 Apache 보다 엔진엑스 Nginx 를 사용하고 싶다면 LAMP 대신 LEMP를 선택할 수도 있습니다. (https://hub.docker.com/r/stenote/docker-lemp/)
* 상기 이미지들은 저도 검색만 해본 것으로 모두 다 사용해본 것은 아닙니다… 사용하실 땐 용도에 맞는 이미지인지 검증을 반드시 해보고 진행하세요.

우분투 이미지와 linode/lamp 를 사용해보도록 하겠습니다.

내려받은 이미지의 목록은 docker images 명령으로 확인할 수 있습니다.

컨테이너 생성/실행

도커 이미지를 이용해 실제 실행되는 공간인 도커 컨테이너 Container 를 만들어보겠습니다.

컨테이너와 생성됨과 동시에 리눅스 터미널 쉘이 나타납니다. 정말 우분투인지 확인하기 위해 apt-get 명령을 입력해보겠습니다.

잘 실행됩니다.

이제 리눅스 쉘을 빠져나오겠습니다. exit 명령어를 입력하면 컨테이너가 종료되어버리니 Ctrl+P, Ctrl+Q 를 순서대로 입력해서 빠져나옵니다.

컨테이너에 작업 디렉토리 연결하기

이제 우분투에 아파치와 PHP를 설치하…지 않고 미리 설치된 LAMP 이미지를 이용해 새 컨테이너를 생성해보겠습니다.
이번에는 호스트의 디렉토리와 컨테이너 내의 특정 디렉토리를 연결해보겠습니다.
간단한 이유입니다. 작업을 터미널에서 vim으로 하는건 번거로운 일이니까요. 작업은 기존에 하던대로 IDE 등에서 진행하고 그 코드를 컨테이너 내부에서 실행하도록 설정을 해주는 겁니다.

/project/docker/index.php 경로에 간단한 파일을 하나 작성합니다. 위에서도 만들었던 파일입니다.

그리고 컨테이너를 실행해보겠습니다.

컨테이너 실행 후 리눅스 쉘에서 아파치를 실행해줍니다.

Hello, Docker

이제 웹브라우저에서 http://127.0.0.1:8888 로 접속합니다.

PHP 5.5.9 환경으로 도는 컨테이너 세팅이 끝났습니다.

이제 데이터베이스 설정이라든가 다른 것들을 더 해볼 수 있지만… 그건 또 다른 포스팅에서 다뤄보도록 하겠습니다.