Infomation

[도커 엔진(Docker Engine)] User guide (tutorial) - 간단한 웹 어플리케이션 실행

DarkSoul.Story 2016. 6. 7. 12:26
반응형

앞서 컨테이너에서 hello world에서 docker ps, docker logs, docker stop 명령어와 기본 컨테이너 실행, 대화형 컨테이너(Interactive container) 실행, 백그라운드에서 실행되는 컨테이너을 살펴보았다. 이번에는 간단한 어플리케이션을 실행 하는 방법에 대해서 살펴보려한다.   


 Steps.

 1. 도커 클라이언트(Docker client) 살펴보기 

 2. 도커 명령어(Docker command) 도움말 확인
 
3. 도커(Docker)에서 웹 어플리케이션 실행
 4. 웹 어플리케이션 컨테이너 실행 확인
 5. 매핑된 네트워크 포트 간단하게 확인하기 
 6. 웹 어플리케이션 로그 보기
 7. 컨테이너 내부 프로세스 찾기
 8. 컨테이너 정보확인
 9. 중지된 컨테이너 다시 시작하기 
 10. 컨테이너 삭제하기 
   


[사용할 도커(Docker) 명령어]


- docker run : 컨테이너 실행

- docker ps : 실행되고 있는 컨테이너 확인

- docker logs : 컨테이너의 표준 출력을 보여준다.

- docker stop : 컨테이너 실행 중지

- docker version : 클라이언트 / 데몬 버전 확인

- docker port : 매핑된 네트워크 포트 확인

- docker top : 컨테이너 내부 프로세스 확인

- docker inspect : 컨테이너 정보 확인

- docker rm : 컨테이너 삭제

1. 도커 클라이언트(Docker client) 살펴보기


도커 클라이언트는 무엇일까? 앞에서 살펴본 컨테이너에서 hello world에서 명령어를 입력할 때 사용한것이 도커 클라이언트이며, 사용할 때 확인 했듯이 command-line 인터페이스(CLI)로 되어 있다. 클라이언트로 할 수 있는 작업은 명령이며, 각 명령은 플래그와 인수를 사용할 수 있다.


Usage: [sudo] docker [subcommand] [flags] [arguments] ..


# docker run -i -t ubuntu /bin/bash

현재 설치되어 있는 도커 클라이언트와 도커 데몬의 버전 정보를 확인하고 싶다면 아래와 같이 명령어를 입력한다. 


# docker version


2. 도커 명령어(Docker command) 도움말 확인

 

도커에 어떤 옵션과 명령어등이 있는지 전체 도움말을 얻고 싶을 때는 아래와 같이 명령어를 입력한다. 


# docker --help


전체 도움말 말고 특정 명령어에 대한 도움말을 확인하고 싶다면, 아래와 같이 입력하면 확인 할 수 있다. 


# docker [명령어] --help


# docker build --help


3. 도커(Docker)에서 웹 어플리케이션 실행


지금까지 실행한 컨테이너는 특별한게 없었다. 여기서는 간단한 웹 어플리케이션 테스트 이미지를 실행해 본다.


# docker run -d -P training/webapp python app.py


위에서 실행한 명령어는 아래와 같다. 


- docker run : 컨테이너 실행 명령어

- d : 백그라운드에서 컨테이너 실행

- P : 호스트에 컨테이너에 있는 필요한 네트워크 포트를 매핑

- training/webapp : 테스트 이미지, 간단한 Python 플라스크 웹 어플리케이션을 포함하여 사전에 구축된 이미지

- python app.py : 컨테이너에서 실행될 명령어 (app.py라는 python 웹 어플리케이션 실행)


4. 웹 어플리케이션 컨테이너 실행 확인


앞서 실행된 컨테이너를 docker ps 명령어를 이용해서 확인해보자. 


# docker ps -l


위에서 사용한 -l 옵션은 마지막 컨테이너에 대한 자세한 내용을 확인할 때 사용한다. 앞서 확인한 docker ps에서 확인한 내용과 비교 했을 때 0.0.0.0:32768->5000/tcp 항목이 새로운 추가된것을 볼 수 있다. 새로운 항목은 -P 옵션에 의해서 호스트의 임의의 포트(TCP 32768)와 이미지 포트(TCP 5000 : 기본 Python 플라크 포트)를 매핑시켰다. 웹 어플리케이션을 실행 시켰으니 호스트에서 해당 내용을 확인해보자. 확인 방법은 웹 브라우저에서 localhost:매핑된 포트를 입력해주면 된다. 



도커(Docker)에서 호스트의 임의의 포트를 할당 받지 않고, 정적으로 네트워크 포트 바인팅을 설정할 수 있다. 정적으로 포트 바인팅을 하는 방법은 -p 옵션을 사용하면 된다. 


# docker run -d -p 80:5000 training/webapp python app.py


 참고 중지된 컨테이너를 확인 하려면 docker ps -a 옵션을 사용해서 확인할 수 있다.



5. 매핑된 네트워크 포트 간단하게 확인하기 


단순히 컨테이너의 특정 포트와 매핑되어 있는 정보 확인하기 위해서 docker ps를 활용하는것 보다, 매핑 정보만 확인할 수 있는 명령어가 있다.


# docker port [컨테이너 이름] [컨테이너 포트]


# docker port hopeful_jones 5000


위 그림과 같이 컨테이너 내부 5000포트와 매핑되어 있는 정보를 확인할 수 있다. 


6. 웹 어플리케이션 로그 보기


웹 어플리케이션의 로그 정보를 확인하는 방법은 앞서 알아본 명령어 중 docker logs 명령어를 이용한다. 


docker logs -f [컨테이너 이름]


위에서 실행한 명령어는 아래와 같다. 


- docker logs : 로그 확인

- f : tall -f 명령처럼 동작 한다.

로그 보기를 종료하려면, Ctrl + c를 클릭하면 로그보기가 종료된다.


7. 컨테이너 내부 프로세스 찾기


컨테이너의 로그 이외에 컨테이너 내부에서 실행되고 있는 프로세스를 확인할 수 있다. 


# docker top [컨테이너 이름]


위그림에서 보듯이 실행되고 있는 컨테이너에는 python app.py만 실행되고 있는것을 확인할 수 있다. 


8. 컨테이너 정보확인


docker inspect 명령어를 이용해서 도커 컨테이너에 low-level로 다이브(dive)할 수 있다. docker inspect 명령어는 지정된 컨테이너의 유용한 설정 및 상태 정보를 포함 하는 JSON 문서를 반환한다. 


# docker inspect [컨테이너 이름]


반환되는 정보 중에서 원하는 정보만 확인할 수 있다. 예를 들어 현재 실행되고 있는 컨테이너의 IP 주소를 확인하고 싶다면 아래와 같이 확인할 수 있다. 


# docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [컨테이너 이름]


9. 중지된 컨테이너 다시 시작하기 


만약 컨터이너를 중지한 직후 다른 사람이 컨테이너를 다시 사용해야 하는 상황이 발생할 경우가 있다. 여기에서 두 가지 선택이있다. 첫번째는 새 컨테이너를 작성하는 방법, 두번째 이전에 중지한 컨테이너를 다시 시작할 수 있다. 새 컨테이너를 작성하는 방법보다 간단하게 두번째 방법인 이전에 중지한 컨테이너를 다시 시작하는 방법을 선택하였다. 


# docker start [컨테이너 이름]


이제 컨테이너가 제대로 실행되고 있는지 docker ps -l 명령어로 확인해보자. 



위 그림과 같이 정상적으로 실행되고 있는것을 확인하였다. 그리고 컨테이러는 재시작하기위해 docker stop [컨테이너 이름]으로 컨테이너를 중지 시킨후, docker start [컨테이너 이름]를 시작시키는 방법이외에 docker restart [컨테이너 이름] 명령어를 입력하면 한번에 컨테이너를 재 시작할 수 있다.    



10. 컨테이너 삭제하기 


컨테이너를 모두 사용하고 필요 없게 되었을 때 컨테이너를 삭제하는 방법에 대해서 살펴보자. 컨테이너를 삭제하는 명령어는 docker rm이다. 

 

# docker rm [컨테이너 이름]


docker rm 명령어를 사용해서 컨테이너를 삭제하려 하였으나, 위 그림과 같이 에러메시지를 출력하며 삭제가 되지 않는다. 왜? 에러메시지를 출력할까? 에러메시지를 출력하는 이유는 삭제하려는 컨테이너가 실제 실행되고 있어 컨테이너를 보호하기 위해 삭제할 수 없다. 그렇기 때문에 컨테이너를 삭제하려면 반드시 컨테이너를 중지 시킨 다음에 삭제하여야한다. 



Reference

Docker : https://www.docker.com/ 


잘못된 부분이 있으면 댓글 남겨주세요. 



반응형