1. Dockerfile 생성 - 항상 Dockerfile이라는 이름을 사용해야 한다.
vi Dockerfile
2. 작성
우분투 18.04 를 기반
메인테이너: 누가 작성했나 자신과 <이메일 정보>
이 다음부터 어느 OS에서 이 이미지를 받아 컨테이너로 실행할 시 자동으로 수행되는 루틴을 작성한다.
아파치를 다운로드 받고 기본 아파치 HTTP 포트인 80을 열고 아파치를 항상 구동중인 상태로 유지하라. 또한 PHP 관련 설치도 진행하라
만약, 위 처럼 작성하고 빌드하면 아래와 같은 화면을 마주할 것이다.
여기서 중지되게 되는데 우리는 어떤 옵션도 줄 수 없다. 따라서 애초에 작성을 잘 해야됨을 의미한다. 이거는 각 언어별 다양한 에러를 접할 수 있고, 직접 경험해봐야 에러에 대한 해결책을 알 수 있다.
3. 다시 빌드
docker build -t example .
각종 오류를 해결한 뒤 다시 빌드한다.현재 OS의 포트를 컨테이너 OS의 80 포트와 연결하고, 볼륨 마운팅 php 기본 경로와 연결(호스트에 어떤 파일을 넣으면 자동적으로 컨테이너의 해당 경로에 놓인것과 같은 효과를 낸다)
docker images 명령어를 통해 정상적으로 빌드 되었음을 확인할 수 있다.
4. 빌드한 이미지를 컨테이너로 실행하기
앞선 경우 컨테이너의 포트를 80으로 설정했다. 그리고 현재 toast instance의 포트를 연결할 필요가 있다.
docker run -p 80:80 -v /home/ubuntu/example/html:/var/www/html example
필자는 현재 포트 80번으로 다른 웹서버를 운영중이라 80번 포트가 사용중이라는 에러가 호출된다.
* 아파치 서버 시작, 재시작, 중지
- sudo /etc/init.d/apache2 start
- sudo /etc/init.d/apache2 restart
- sudo /etc/init.d/apache2 stop
그럼에도 포트가 이미 할당되었다는 오류가 뜬다면
docker container ls
docker rm -f <container-name>
위와 같이 할당된 포트를 갖는 컨테이너를 제거 후 다시 실행하면 잘 작동할 것이다.
5. 아파치 서버가 구동되는지 확인
크롬이나 브라우저에서 해당 인스턴스의 ip 주소를 입력하면 다음과 같이 출력될 것이다.
현재 부터는 컨테이너의 아파치 웹서버가 구동중이라 추가로 터미널을 열어 작업해야 된다.
6. 추가로 터미널을 열어 작업하기
새 터미널을 열어 다음과 같이 작성하고 웹서버 페이지를 새로고침하면
위와 같이 뜨면서 볼륨 마운트도 잘 된 것을 확인할 수 있다.
7. 도커의 장점을 맛보기
우리는 현재 앞서 생성한 것과 같이 하나의 웹서버를 구동할 수 있는 이미지를 갖고 있다.
이제는 81번 포트도 열어 컨테이너의 80번 포트와 연결해본다.
먼저 각자 사용하는 클라우드의 81번 포트 보안을 열여준다.
그다음, 다음과 같이 단순히 실행만 하면 ip 주소 뒤에 :81 을 붙여 접속하면 정상적으로 같은 화면이 출력될 것이다.
docker run -p 81:80 -v /home/ubuntu/example/html:/var/www/html example
하나의 서버에서 여러 개의 웹서버를 손쉽게 구동 가능하다.