728x90

이 포스팅 분류는 Docker를 정확히 어떻게 사용할지를 다루지 않는다.

대신 Docker로 특정 상황에 어떻게 환경을 구축해야하는지의 예제를 담고 있다.

만약 이 Docker에 대해서 어떻게 관리하는 지를 알고싶다면 인터넷을 검색을 활용하거나

필자의 블로그에서 Software-Docker를 확인해주기를 바란다.

현재 여기 업로드 되어있는 모든 예제들은 필자의 github repository에 올라와있다.

그 주소는 아래와 같다.


https://github.com/kukaro/Eris-DockerExampleTemplate

예제를 직접 확인하고 싶다면 해당 repository를 참조하라.


php를 사용하면서 테스트의 필요성을 좀 많이 느끼고 있었다.

그리하여서 도커로 프로젝트를 만들어서 사용하고 있었는데 모르시는 분들에게 유용하게 써라고 하기위해서 공유하려고 한다.



프로젝트 구조는 위와 같다.

dockerfiler을 그냥 실행하지 않고 docker-compose로 실행한다.

근데 docker-compose도 쉽게 하기 위해서 쉘 스크립트로 감싸서 실행한다.


그 쉘 스크립트가 바로 init.sh이다.


#!/usr/bin/env bash

docker build -t php-server .
docker-compose up -d

명령어는 아주 간단하다. 도커 이미지를 빌드하고 docker-compose를 실행한다.


version: '3.3'

services:
php-server-instance:
image: php-server
restart: always
container_name: php-server-instance
command: /usr/sbin/apache2ctl -D FOREGROUND
volumes:
- ./src/:/var/www/html
ports:
- '10080:80'
expose:
- '10080'

docker-compose는 빌드된 도커 이미지를 추가적인 설정으로 실행시켜준다.

여기서 우리는 포트 번호를 10080에 매칭했으므로 나중에 10080으로 실행해야한다.


# Install Ubuntu
FROM ubuntu:18.04
MAINTAINER kukaro <justkukaro@naver.com>

# Set Argument
ENV DEST /var/www/html

# Need Another
RUN apt-get -y update && apt-get -y install vim

# php7.2인스톨 할때 타임존 입력하게 하는거 이걸로 하면 해결됨
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Install
RUN apt-get -y install apache2
RUN apt-get -y install php7.2
RUN apt-get -y install libapache2-mod-php
RUN a2enmod php7.2

그러면 도커 파일을 보도록하자.

꽤 심플하기 때문에 분량도 작다. 몇몇군대를 설명하도록 하겠다.


FROM ubuntu:18.04

필자의 경험상 최신버전을 의미하는 latest는 별로 좋지 않다.

왜냐하면 저장소의 위치가 바뀌는 경우가 많고 버전이 바뀌는 경우가 많기 때문이다.

그래서 버전은 반드시 명시적으로 사용하도록하자.


ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

이부분은 꽤 중요한데 타임존을 설정하는 문제이다.

원하는 타임존을 설정하면 되긴하는데 필자는 아시아의 서울로 했다.

이게 왜 중요하냐먄 아래에 php7.2에서 설치시 타임존을 요구하기 때문이다.

자동화 하려면 이 설정을 해주면된다.


RUN apt-get -y install apache2
RUN apt-get -y install php7.2
RUN apt-get -y install libapache2-mod-php
RUN a2enmod php7.2

차례 대로 아파치 설치, php설치, php연결 모듈 설치, 연결 모듈 실행

dockerfile에 expose나 cmd가 없는 이유는 어짜피 docker-compose에서 다시 입력하면은 의미 없어지기 때문이다.

물론 적어도 상관없다. 의미 없어지니까.


잠시 다시 docker-compose로 돌아와보자


volumes:
- ./src/:/var/www/html

이 볼륨부분이 아주중요하다.

docker내의 ADD와 volumes의 역활이 비슷하다고 착각하는 경우가 많은데(필자도 한때 그랬다)

둘의 역활은 엄연히 차이가 있다.

volume은 외부와 내부가 연결된다. 즉 필자의 local과 도커 컨테이너가 연결된다.

즉 변경결과가 바로 도커 컨테이너에 반영되게 된다.


<?php
echo 'hello';

src아래에는 아주 간단한 test.php가 있다.

이는 /var/www/html 아래에 가서 위치하게 된다.

그래서 우리는 src폴더 아래를 수정을 하면 바로 docker에 반영이되서 결과가 달라지게된다.


실행해보면 test.php의 내용을 볼 수 있다.

원래는 내용이 위와 같았는데 필자가 hello로 수정했다.


새로고침하면 바로 반영되는걸 확인할 수 있다.


+ Recent posts