1. 도커 허브에 공유된 이미지 사용하기

이미지를 내려 받는 과정을 docker container run을 통해 도커에 전적으로 맡길 수도 있지만, 도커 CLI를 통해 명시적으로 원하는 이미지를 내려받을 수도 있다.

docker image pull diamol/ch03-web-ping

image.png

이미지 이름은 diamol/ch03-web-ping이고, 이 이미지는 도커가 가장 먼저 이미지를 찾기 위해 접근하는 저장소인 도커 허브에 저장돼 있다. 이미지를 제공하는 저장소를 레지스트리(registry)라고 하는데, 도커 허브는 무료로 제공되는 공개 레지스트리다. 도커 허브는 웹 인터페이스도 제공한다.

docker image pull 명령을 실행해 출력된 내용 중 흥미로운 부분은 이미지가 저장된 방식을 짐작케 하는 부분이다. 도커 이미지는 논리적으로는 하나의 대상이다. 이 이미지의 경우 내가 작성한 애플리케이션 코드 외에 Node.js 런타임을 포함한다.

이미지를 내려받는 과정을 보면 여러 건의 파일을 동시에 내려받는다는 점에서 단일 파일을 내려받는 과정이 아니라는 것을 알 수 있다. 이들 각각의 파일을 이미지 레이어라고 부른다. 도커 이미지는 물리적으로는 여러 개의 작은 파일로 구성돼 있다. 그리고 도커가 이들 파일을 조립해 컨테이너의 내부 파일 시스템을 만든다. 모든 레이어를 내려받고 나면 전체 이미지를 사용할 수 있게 된다.

docker container run -d --name web-ping diamol/ch03-web-ping

--name 플래그를 사용하면 컨테이너에 원하는 이름을 붙이고 이 이름으로 컨테이너를 지칭할 수 있다. 이 컨테이너에도 쉽게 구별할 수 있도록 web-ping이라는 이름을 붙였다.

이 컨테이너로 실행된 애플리케이션은 blog.sixeyed.com에 반복적으로 요청을 보낼 것이다. 무한 루프를 동며 실행되는 애플리케이션이므로 docker container 명령을 통해 컨테이너의 상태를 확인할 수도 있다.

docker container logs web-ping

image.png

웹 요청을 보내고 그에 대한 로그를 생성하는 애플리케이션은 요청에 대한 응답 시간을 파악할 수 있다는 점에서 유용하다. 이는 웹 사이트의 동작 여부를 확인하는 용도로도 활용한 수 있다. 그러나 이 애플리케이션에는 요청 대상이 블로그 주소로 고정돼 있는 듯하니 블로그 주인 이외의 사람에게는 그리 쓸모가 없을 것 같다.

하지만 애플리케이션에서 대상 URL과 요청 간격, 요청 타입 등을 설정할 수 있다. 시스템의 환경 변수 값에서 설정값을 읽어 온다.

**환경 변수**(environment variable) 는 운영체제에서 제공하는 키-값 쌍이다. 윈도나 리눅스나 같은 방식으로 동작하며, 아주 적은 양의 데이터를 저장하는데 유용하다. 도커 컨테이너도 별도의 환경 변수를 가질 수 있다. 그러나 이 환경 변수는 호스트 운영체제의 것을 가져오는 게 아니라 컨테이너의 호스트명이나 IP 주소처럼 도커가 부여해 준다.

web-ping 이미지에도 이 환경 변수의 기본값이 포함돼 있다. 컨테이너를 실행하면 도커가 이들 기본값을 컨테이너에 적용하고 이 값을 애플리케이션에서 사용한다. 컨테이너를 생성할 때 기본값과 다른 값을 환경 변수로 설정할 수도 있다. 환경 변수 값을 변경하면 애플리케이션의 동작 내용도 바뀐다.

docker rm -f web-ping
docker container run --env TARGET=google.com diamol/ch03-web-ping

image.png

이번에는 --detach 플래그를 적용하지 않아 출력 내용이 콘솔에 나타나고 HTTP 요청을 보내는 대상이 google.com으로 변경되었다.