최근 몇 년간,
도커(Docker)
와 같은 컨테이너 기술이 급부상 하고 있다.
많은 개발자들이 왜 도커에 주목하고 있는지 도커에 대해 파헤쳐보도록 하자
이전에는 어플리케이션을 개발한 후에 해당 어플리케이션을 실행시킬 서버 환경을 설정하는 것이 꽤나 번거로운 일이었다. 서버 환경이나 라이브러리 등의 업데이트가 필요할 때마다 전체 시스템을 다시 구성해야 했다.
하지만도커
를 사용하면 개발한 어플리케이션을 격리된 컨테이너 안에 담아 배포할 수 있기 때문에, 하나의 서버 안에서 여러가지 프로그램이 동시에 돌아가게 할 수 있다.
즉, 도커는 데이터나 프로그램을 격리시키는 기능을 제공하는 소프트웨어
이다.
컨테이너를 만드려면 이미지
(광디스크의 전체 내용을 담은 ISO파일 등)가 필요하다!
=> 이미지로 부터 동일한 컨테이너 여러 개를 만들 수 있고 컨테이너로부터 이미지를 만들 수도 있다.
도커는 리눅스
운영체제가 필요한데 윈도우와 macOS에서도 구동은 가능하나 내부적으로는 리눅스가 사용된다.
즉 컨테이너를 동작 시키는 프로그램도 리눅스용 프로그램이라고 할 수 있다.
여러 프로그램이 한 서버에서 실행되면 발생할 수 있는 문제를 해결할 수 있다.
ex) 시스템 A와 B가 서로 공유하는 프로그램이 있다.
시스템 A
에서는 이 프로그램의 업데이트가 필요한데 업데이트를 하면 이 프로그램을 공유하고 있는시스템 B
에도 문제가 생길 수 있다.
1. 기능적 의미의 서버
: 무슨무슨 기능을 제공하는 의미(메일 서버, 웹 서버, 데이터베이스 서버 등)
2. 물리적 컴퓨터로서의 서버
: 데스크톱 컴퓨터와 같이 어딘가에 물리적으로 존재하는 컴퓨터
여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 존재할 수 있다.
이 때도커
는 각각의 기능적 서버를 독립적인 환경에서 안전하게 운용할 수 있다.
또한 한 대의 물리 서버 컴퓨터에서 컨테이너로 여러 개의 웹서버를 올릴 수 있다.
도커를 이용하면 운영체제가 달라도 컨테이너를 자유로이 옮길 수 있다.
도커 엔진에서 다른 도커 엔진으로 옮기는 형태이기 때문에!
운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.
그리고 컨테이너 안에서 프로그램이나 데이터가 위치하는 구조이다.
도커 허브
: 공개된 컨테이너 이미지가 모여 있는 곳
도커 이미지는 도커 허브
에서 받을 수 있다. 도커 허브 바로가기
1. 공식 이미지를 사용한다.
도커에서 직접 배포하거나 소프트웨어 개발 기업이나 조직에서 제공하는 것으로 보안적으로 안정적이고 고르기도 쉽다.
2. 커스텀 이미지를 만들어 사용한다.
'한 컨테이너에 한 프로그램'
한 컨테이너에 모든 프로그램을 집어넣을 수도 있지만 보안 및 유지관리 측면에서 '한 컨테이너에 한 프로그램' 원칙을 따르는 것이 좋다
컨테이너는 '쓰고 버리는' 일회용품
하나의 업데이트를 하면서 계속 사용하는 것 보다는 업데이트 된 소프트웨어가 들어간 새로운 컨테이너를 사용하는 것이 좋다.
도커 컨테이너의 생애주기
만들기 -> 실행하기 -> 종료하기 -> 폐기하기 -> 만들기
1. 독립된 환경으로 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
=> 똑같은 어플리케이션도 여러 개 띄워서 각자의 서버 환경에 맞게 관리할 수 있는데
이처럼 여러 프로그램을 독립적인 환경에서 안전하게 사용할 수 있다.
2. 이미지를 만들 수 있다
=> 교체와 업데이트가 쉽고 이동성이 좋다
3. 컨테이너에 커널을 포함시킬 필요가 없으므로 가볍다
한 대의 물리 서버에 여러 대의 서버를 띄우는 형태이기 때문에
하나의 물리 서버에 문제가 생기면 모든 컨테이너에 영향
을 미치는 취약점을 가지고 있다.