본문 바로가기

카테고리 없음

도커 이미지와 컨테이너 생성 삭제 방법

1. 도커 이미지와 컨테이너

도커 엔진에서 사용되는 기본단위는 이미지와 컨테이너입니다. 이 두 가지가 도커의 핵심 필수 요소입니다. 저와 함께 도커 이미지와 도커 컨테이너에 대해서 같이 알아보도록 할까요?

1.1 도커 이미지 = 저장소 이름 + 이미지 이름 + 태그


도커 이미지 = 저장소 이름 + 이미지 이름 + 태그


도커 이미지는 컨테이너를 생성할 때 필요한 구성이며, 가상 머신을 생성할 대 사용하는 파일과 비슷하다고 보시면 됩니다. 여러 개의 바이너리 파일로 존재하며 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용이 됩니다. 이미지는 도커를 통해 내려받을 수 있으며 따로 설치는 필요하진 않습니다. 도커에서 사용하는 이미지 이름은 저장소 이름 이미지 이름 태그 형태로 구성이 됩니다. 여기서 저장소란 말 그대로 이미지가 저장된 곳이라 생각하면 됩니다. 이미지 이름은 이미지 자체가 어떤 역할을 나타낼 때 사용됩니다.

1.2 도커 컨테이너

도커 이미지는 기본적인 리눅스 체제부터 아파치 데이터 베이스 등 각종 어플리 케이션, 하둡 등 빅데이터 분석 도구까지 다양한 종류가 존재합니다. 이러한 컨테이너를 생성하면 해당 이미지 목적에 맞게 파일이 구성되어 있는 격리된 공간이 생성이 되며 이것이 바로 도커 컨테이너입니다. 컨테이너는 이미지를 읽기 전용으로 사용하면서 이미지에서 변경된 사항만 저장이 되기 때문에 기존에 이미지는 영향을 따로 받지 않습니다. 각각의 컨테이너는 독립성을 지닙니다.

1.3 컨테이너 생성

도커를 사용하기 앞서서, 도커 버전을 확인해봅시다.

# docker -v

Docker version 18.09.2 build 

도커는 다양한 기능이 빠르게 업데이트되며 새로운 버전이 배포가 되기 때문에 버전은 매우 중요합니다. 버전을 확인 후에 컨테이너를 생성합니다. docker run 명령어는 컨테이너를 생성하고 실행하는 역할을 합니다. 

# docker run -i -t ubuntu:14.04 명령어를 입력하게 되면 도커 중앙 이미지인 허브에서 자동으로 이미지를 내려받게 됩니다. 단 한 줄의 docker명령어로 컨테이너를 생성 및 실행하고 동시에 컨테이너 내부까지 들어왔습니다.  컨테이너 내부에서 빠져나오는 방법은 쉘에서 exit로 종료할 수 있습니다.

1.3 컨테이너 삭제


컨테이너는 반드시 중지 이후에 삭제가 가능


더 이상 삭제하지 않는 컨테이너를 삭제할 때는 docker rm 명령어를 사용합니다. 한 번 삭제한 컨테이너는 복구가 불가능하기 때문에 삭제할 때는 충분히 고려를 한 이후에 삭제를 진행해야 됩니다. 다음 명령어를 입력해 컨테이너를 삭제합니다. 컨테이너의 이름은 생성한 컨테이너의 이름에 맞게 적절히 변경합니다.

# docker rm angry_morse 

컨테이너가 삭제됐는지 확인하려면 docker ps -a 명령어를 입력해서 확인을 해야 됩니다. 실행 중인 컨테이너는 삭제할 수 없기 때문에 컨테이너를 정지 한 뒤 삭제하거나 강젤 삭제할 수 있는 옵션을 추가로 넣어야 됩니다. 첫 번째로 삭제한 컨테이너는 상태가 정지 상태였기 때문에 가능했으며, 기동 중인 컨테이너를 삭제하려면 정지를 시킨 이 후에 컨테이너를 삭제해야만 합니다.  도커를 사용하다 보면 생성한 컨테이너가 너무 많아서 하나하나 삭제하기가 힘들 때는 prune 명령어를 입력해서 모든 컨테이너를 삭제할 수 있습니다.

1.4 컨테이너 외부에 노출

컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당받습니다. 기본적으로 도커는 컨테이너에 순차적을 아이피를 할당하고, 컨테이너를 새롭게 생성한 후 ifconfig 명령어로 컨테이너의 네트워크 인터페이스를 확인합니다. 도커의 NAT IP인 인터페이스와 로컬 호스트인 인터페이스에 아무런 설정을 하지 않았다면 컨테이너는 외부에서 접근할 수 없으며 도커가 설치된 호스트만 접근할 수 있습니다. 외부 컨테이너의 애플리케이션을 노출하기 위해서는 포트를 호스트 IP와 포트에 바인딩해야 합니다. 컨테이너에서 호스트로 빠져나온 뒤 다음 명령어를 통해 컨테이너를 생성하게 되면 컨테이너에 아파치 웹 서버를 설치해 외부에 노출이 가능해집니다.

# docker run -i --name mywebserver -p 80:80 ubuntu:14.04

 


-p 옵션은 호스트의 포트: 컨테이너의 포트


호스트의 8888번 포트를 컨테이너의 80번 포트와 연결을 하려면 8888:80과 같이 입력해야 되며, 호스트의 특정 IP를 사용하려면 192.168.10.11:8888:80과 같이 바인딩할 IP와 포트를 반드시 같이 명시해야 됩니다. 이후 컨테이너를 생성해 내부로 들어오게 되면 다음과 같이 명령어를 차례로 입력하게 되면 아파치 웹 서버를 설치하게 됩니다.

# apt-get update

# apt-get install apache2 -y

# service apache start

아파치 웹 서버의 설치 및 실행이 완료가 되면 도커 엔진 호스트의 IP:80으로 접근이 가능하게 됩니다. 실제로 아파치 서버가 설치된 것을 컨테이너 내부이므로 호스트에는 어떠한 영향도 주지 않습니다. 호스트의 IP와 포트를 컨테이너의 IP와 포트로 연결하는 개념이 매우 중요합니다.