docker 란?

docker 이전 가상화의 문제점

어느정도 규모있는 애플리케이션을 개발하려면, 운영체제 위에 여러가지 소프트웨어의 설치와 환경설정이 필요하다.
예를 들면, 웹서버, 데이터베이스 등등…
하지만, 여러 소프트웨어의 설치와 환경설정은 여간 어려운게 아니다.

따라서 개발자는 각 소프트웨어의 전문가가 미리 설정해둔 소프트웨어를 제공받길 원한다.
하지만, 물리적으로 하드웨어를 늘리지 않으면서, 소프트웨어를 제공받기 위해 vmware, virtualbox같은
가상화 소프트웨어를 사용하여 운영체제를 설치하고, 운영체제 위에 각각의 소프트웨어를 설치하여 이 문제를 해결했었다.

하지만, 각각의 소프트웨어를 설치하기 위해 운영체제라는 거대한 소프트웨어를 실행시켜야 하는 부담이 있었고,
운영체제 위에서 운영체제를 구동시키기 위해선 비교적 많은 리소스를 낭비해야하는 문제점이 있었다.

docker 이전의 가상화(출처 : 생활코딩 Docker 입문수업 - 1)

해결책으로서의 docker

가상화 소프트웨어의 장점인 격리된 소프트웨어 실행 공간은 살리면서
단점인 과도한 자원낭비 문제를 해결하고자 docker라는 기술이 등장하였다.

docker는 하나의 Host OS위에 격리된 공간에서 각각의 소프트웨어를 최소한의 lib, bin으로만 구동시킬 수 있고,
Network로 host와 통신하거나 혹은 각각의 docker 소프트웨어끼리 통신이 가능하게 되었다.

docker Architecture (출처 : docker document)

docker라는 단어의 사전적 의미로 부터 생각해보는 기술적인 역할

  • docker(미국식 : [│dɑːkə(r)] 영국식 : [│dɒkə(r)]) : 항만[부두] 노동자 라는 의미

각 격리된 소프트웨어 구동 환경을 Container 라고 한다. docker는 사전적 의미로부터 봤을 때,
이 Container를 다루는 역할을 가지고 있는 engine;daemon 등으로 이해할 수 있다.

docker 사용하기

docker install

docker는 Linux OS의 Container라는 기술을 기반으로 동작한다.
따라서 Linux OS 위에서 기본적으로 동작해야 하며, Windows의 경우 WSL(Windows Subsystem for Linux)을 활성화 한 후
설치가 가능하다.

각 OS에서 docker engine이 구동되는 architecture

docker를 설치하는 방법은 아래의 docker 공식 홈페이지에서 확인하여 각 OS에 맞는 프로그램을 설치한다.

docker install manual

docker image pull

image는 docker 컨테이너를 만드는 명령어가 저장된 읽기 전용 템플릿이라고 정의할 수 있다.
image가 있어야 docker가 container를 어떻게 구성할 지 알 수 있다.

image는 docker hub에서 각 소프트웨어 제조사에서 공유한
공식적인 image를 찾거나, 다운로드 받을 수 있다.

검색 결과 상세 화면으로 넘어가면 해당 image를 pull받는 명령어가 제공된다.
1
docker pull [image_name]

docker container run

docker engine 위에서 container를 실행하는 방법은 2가지가 있다.

docker 명령어로 실행하기

1
2
3
# docker 명령어 사용법을 숙지한다.
$ docker --help
$ man docker

docker hub에서도 간략하게 container를 실행하기 위한 run 명령어를 제공한다.

docker desktop 에서 실행하기

image를 pull 받은 후 docker desktop 프로그램을 실행시켜 보면, images 탭에 리스트가 노출되는 것을 확인할 수 있다.

실행하고자 하는 image에 run 버튼을 눌러보면, 각종 설정값을 gui 환경에서 셋팅 후 실행시킬 수 있다.

docker network configuration

docker engine 위에서 동작하는 container 중 각자 필요한 endpoint 끼리 network로 통신하도록 구성할 수 있다.
이로써, 보안적으로 유리하게 설정할 수 있다.

docker volume

docker의 architecture를 가만히 보면, 자연스럽게 각 container 내에 있는 파일이나 데이터를 유지하거나,
각 container 끼리의 파일이나 데이터 전송에 대한 의문이 생길 수 있다.
이러한 문제를 해결하기 위한 것이 바로 docker volumn이다.

docker volumn은 host의 파일시스템과 container 의 파일시스템을 연결시켜 주는 host 내의 공간이다.
따라서 이를 도식화 해보면 다음과 같다.

docker volumn을 통해 다음과 같은 문제를 해결할 수 있다.

  • host의 파일 시스템 내에서 버전관리 하기에 용이하다.
  • host와 container간, container와 container간 파일 공유가 가능하다.
    • DBMS와 같은 data파일을 host와 공유하여, container가 중지되어도 데이터를 유지할 수 있다.

참고자료