이미지와 컨테이너
컨테이너를 생성하려면 먼저 이미지를 만들어야 한다. 이미지는 컨테이너를 찍어내는 ‘빵틀’과 같은 것으로, 컨테이너의 설계도 역할을 한다. 이해하기 쉬운 예를 들자면, 로봇 장난감을 찍어내는 금형과 같다.
이미지는 금형과 같다
로봇 장난감을 원하는 아이에게 로봇을 만드는 금형은 아무 소용이 없다. 이미지 역시 이미지 자체로는 큰 쓸모가 없다. 이미지는 컨테이너를 만드는 데 사용한다.
우리가 실제 사용하는 것은 컨테이너이며, 이미지를 그대로 사용하는 일은 없다.
이미지는 금형과 같은 역할을 하는 것으로, 하나만 있으면 똑같은 것을 여러 개 만들 수 있다.
따라서 동일한 컨테이너를 여러 개 배치하기 편리하다.
컨테이너로도 이미지를 만들 수 있다
이미지로만 컨테이너를 만들 수 있는 것이 아니라 컨테이너로도 이미지를 만들 수 있다. 이미지로 컨테이너를 만드는 것이면 모를까, 그 반대의 경우는 어떤 이점이 있는지 잘 감이 오지 않는다. 컨테이너로 이미지를 만드는 것은 이미 컨테이너에 손을 대서 컨테이너의 금형을 새로이 만드는 과정이다.
컨테이너로부터 이미지를 만들 수 없었다면 여러 개의 컨테이너를 일일이 수정할 수밖에 없었을 것이다.
개조된 컨테이너로부터 이미지를 만들고 나면 새로 만든 이미지를 사용해 개조된 컨테이너를 여러 개 만들 수 있다. ‘개조’라고 하면 약간의 수정을 가한 정도를 생각하기 쉬운데, 예를 들어 소프트웨어나 시스템을 넣은 새로운 이미지를 만들면 다수의 서버를 준비하는 작업이 매우 간단해진다.
도커 엔진 간에 이동이 가능하다
동일한 컨테이너를 여러 개 만들지 않더라도 이러한 특성을 이용해 다른 물리 서버에 설치된 도커 엔진으로 컨테이너를 이동시킬 수 있다. 컨테이너는 도커 엔진만 설치돼 있으면 구동이 가능하므로 다른 서버나 컴퓨터에 도커 엔진을 설치하고 새로운 도커 엔진에 이미지를 이용해 똑같은 컨테이너를 생성하면 된다. 사실 컨테이너 자체가 이동하는 것은 아니지만 이미지를 통해 컨테이너가 이동한 것과 같은 효과를 얻을 수 있다.
도커 허브와 도커 이미지
초보자가 컨테이너의 이미지를 밑바닥부터 만들어 낼 일은 거의 없다. 그럴 일이 있다면 상당히 특수한 상황일 것이다. 굳이 만든다면 빈 컨테이너에 운영체제(비슷한 것)를 포함시켜 만드는 경우가 있겠지만 이런 경우에도 주로 사용할 이미지가 이미 준비돼 있다.
그럼 이미지는 어디서 구해야 할까? 이미지는 주로 ‘도커 허브’에서 구하게 된다. 도커 허브는 공식적으로 운영되는 도커 레지스트리(도커 이미지를 배포하는 서비스)의 이름이다.
도커 허브는 스마트폰의 구글 플레이 스토어와도 같은 존재로, 공개된 컨테이너 이미지가 모여 있는 곳이다. 이곳에서 원하는 컨테이너의 이미지를 내려받을 수 있다.
도커 허브에는 다양한 공개 컨테이너 이미지가 제공된다. 누구든지 이미지를 등록하고 공개할 수 있으므로 이미지의 종류도 아주 많다.
도커 허브에는 어떤 이미지가 공개돼 있을까?
도커 허브에는 운영체제(비슷한 것)만 들어 있는 이미지부터, 여러 가지 소프트웨어가 함께 포함된 것까지 다양한 이미지가 제공된다. 직접 수정하고 싶다면 간단한 이미지, 편리하게 사용하고 싶다면 설정이 완료된 이미지 등 용도에 따라 원하는 것을 선택하면 된다.
같은 소프트웨어도 다양한 변종의 이미지가 제공된다.
예를 들어, 리눅스에는 다양한 배포판(종류)이 있는데, 주요 배포판은 모두 이미지로 제공된다. 더 나아가 배포판의 버전마다 운영체제(비슷한 것)만 들어간 컨테이너도 별도로 제공된다.
여기에 다시 소프트웨어(프로그램)가 들어가므로 조합의 가짓수는 셀 수 없이 많다.
안전한 컨테이너 이미지를 고르는 법
이렇게 이미지의 종류가 많다 보니 이미지를 선택하는 데 어려움을 느낄 수도 있다. 거기다 도커 허브는 누구나 자유롭게 이미지를 등록할 수 있기 때문에 안전하지 못한 이미지가 있을 수 있다.
안전한 이미지를 선택하는 주요 방법을 살펴보자.
공식 이미지를 사용한다
컨테이너 이미지 중에는 공식 이미지가 여럿 있다. 이들 공식 이미지는 도커에서 직접 배포하거나 해당 소프트웨어를 개발 및 관리하는 기업이나 조직에서 제공하는 것도 있다.
공식 이미지를 사용하면 이미지 선택도 쉽고 보안도 챙길 수 있다.
다만 컨테이너에 포함된 ‘운영체제(비슷한 것)’이 특정 운영체제 및 버전으로 한정된 경우가 있어서 원하는 것을 선택하지 못할 수도 있으므로 꼭 특정 운영체제 및 버전을 사용해야 하는 상황에는 주의가 필요하다.
커스텀 이미지를 직접 만들어 사용한다
컨테이너 이미지를 원하는 대로 구성해 커스텀 이미지를 만들 수 있다. 필요한 최소한의 요소가 담긴 이미지에 필요한 소프트웨어를 추가로 설치해 커스텀 이미지를 만든다.
‘운영체제(비슷한 것)’만 들어있는 컨테이너부터 직접 만드는 것은 추천하지 않으나 운영체제가 포함된 이미지에 소프트웨어를 넣는 정도는 그리 어렵지 않다.
또한 공식 이미지가 아닌 모든 이미지가 위험성을 안고 있는 것은 아니다.
공식 이미지가 아니더라도 선량한 사용자들이 만든 안전한 이미지도 많다.
다만 경험이 쌓일 때까지는 섣불리 판단하지 말고 신중하게 이미지를 선택해 사용하도록 한다.
다양한 형태로 조합이 가능한 컨테이너
컨테이너는 이미지의 선택 외에도 다양한 조합을 고려해야 한다.
도커를 사용할 때의 원칙 중 하나로, ‘한 컨테이너에 한 프로그램’이라는 것이 있다. 말 그대로 하나의 프로그램만 담긴 컨테이너를 사용한다는 의미로, 보안 및 유지 관리 측면에서 유리하기 때문에 많이 쓰이는 정책이다.
따라서 단순히 워드프레스를 구축할 때도 다양한 구성이 가능하다.
워드프레스를 사용하려면 아파치(웹 서버 소프트웨어), MySQL 같은 DBMS, 워드프레스로 세 가지 소프트웨어가 필요하다.
도커를 사용해 워드프레스를 구축하는 방법은 이들을 각각 별도의 컨테이너로 구성할 수도 있고, 한 컨테이너에 모두 집어넣는 방법도 있다.
참고
그림과 실습으로 배우는 도커 & 쿠버네티스