이번 글에서는 이미지와 컨테이너에 대해 알아보고 컨테이너를 실행시켜겠습니다.
컨테이너는 하나의 어플리케이션입니다. 특징이라고 한다면, 완벽하게 분리되어 실행될 뿐만 아니라 CPU나 Memory나 계정 모두 독립적으로 사용됩니다. 우리가 이전 글에서 VM 리눅스에서 docker 데몬을 실행시킨 것은, 컨테이너가 실행될 수 있는 플랫폼을 만든 것이며 모든 컨테이너는 하나의 커널을 사용합니다.
도커에는 이미지라는 개념이 있습니다. 그리고 이미지는 컨테이너와 동일합니다. 정확히는 실행되지 않을 때는 이미지, 실행되면 컨테이너가 되는 것입니다. 이 이미지들은 기본적으로 도커에서 제공하는데, 그 수가 굉장히 많습니다. 아래 주소로 가면 도커에서 제공하는 이미지들이 모여있습니다.
hub.docker.com
이제 명령어를 이용해 nginx 이미지를 설치해볼텐데요, 그 전에 미리 설치된 이미지가 있는지 확인합니다.
docker images
없는 것이 확인됐고 nginx를 설치해보겠습니다. 보면 7개를 pull했는데, 이 말은 이 nginx 이미지는 7개의 Layer로 구성되어 있다는 뜻입니다.
docker pull nginx
그리고 설치된 이미지 파일을 살펴보겠습니다.
그럼 먼저 설치된 이미지들을 확인해보겠습니다.
docker images
설치된 nginx 이미지를 실행시켜보겠습니다. 이렇게 실행된 이미지를 컨테이너라 부릅니다. 명령어 아래에 뜨는 값은 이 컨테이너의 고유 ID입니다.
docker run --name web -d -p 80:80 nginx
docker run: Docker 컨테이너 생성 및 실행을 시작합니다.
--name web: 컨테이너에 이름을 제공합니다 (이 경우 "web").
-d : 컨테이너를 백그라운드에서 실행됩니다.
-p 80:80 : Docker 호스트의 포트 80을 NGINX 컨테이너의 포트 80에 매핑합니다.
nginx : 컨테이너가 생성되는 Docker 이미지의 이름입니다 (이 경우 nginx).
80포트가 열려있는 걸 확인할 수 있습니다.
netstat -tnlp
또 현재 VM 서버에서 도커 프로세스로써 nginx가 실행되고 있는 것을 확인할 수 있습니다.
docker ps
호스트 즉, 도커가 띄워진 CentOS VM의 80포트와 도커로 띄운 nginx 컨테이너의 80포트를 매핑시켰기 때문에 제 localhost:80으로 요청을 하면 nginx 화면이 떠야 합니다. 당연히 로컬에서 저 주소로 들어가도 nginx 화면이 나옵니다. 참고로 localhost가 사용되어 로컬 노트북을 의미하는 게 아니냐는 오해를 할 수도 있는데요, 제가 VM의 네트워크 방식을 NAT 네트워크로 설정했고 또 포트포워딩을 해주었기 때문에 가능한 것입니다.
curl localhost:80
이제 도커 컨테이너를 종료시켜보겠습니다.
docker stop web (컨테이너 이름)
그리고 컨테이너를 삭제할 수도 있는데요,
docker rm web (컨테이너 이름)
심지어 이미지까지 삭제할 수도 있습니다. 아래 두 명령어는 같은 의미입니다.
docker rm image nginx
docker rmi nginx
이번 글에서는 도커에 사용되는 이미지와 컨테이너에 대한 개념을 살펴보고, 이미지 설치 및 컨테이너 실행을 해봤습니다. 다음 글에서는 컨테이너를 직접 만들어 보겠습니다.