도커(Docker) 입문편: 컨테이너 기초부터 서버 배포까지

이분은 리눅스에서 돌리고 계시지만, 윈도우에서 docker desktop을 깔고 커맨드로 실습하면 된다.

들어가며

도커Docker는 2013년에 등장한 컨테이너 기반 가상화 도구입니다. 파이콘 US 2013Pycon US 2013에서 솔로몬 하이크Solomon Hykes는 리눅스 컨테이너의 미래The Future of Linux Container라는 라이트닝 토크에서 도커를 처음 소개했습니다. 현재 도커는 고 언어Go로 개발되고 있으며, 2014년 도커콘 2014DockerCon 2014에서 1.0 버전을 발표한 이후, 2020년 현재 최신 버전은 19.03.8입니다.

도커는 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줍니다. 도커를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있습니다. 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며, 도커만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능합니다.

이 글은 도커 입문자를 위한 튜토리얼로서, 도커의 핵심적인 개념들과 기본적인 사용법을 소개합니다. 도커를 왜 사용해야하는지 궁금하신 분들은 먼저 아래 글을 읽어주세요.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

도커(Docker) 시작하기: 우분투에서 센트OS로 프로세스 실행하기

사용자용 가상머신Virtual Machine은 이제 대중적인 도구가 되었습니다. 가상머신을 실행하는 호스트 머신에 가상화된 하드웨어와 OS를 구축함으로써, 호스트와는 다른 환경을 구축하고 개발과 테스트를 비롯한 다양한 목적으로 사용할 수 있습니다. 하드웨어를 소프트웨어로 에뮬레이션하는 가상머신은 시스템 분리를 통한 프로세스 격리 관점에서는 아주 후한 점수를 줄 수 있지만, 단순히 프로세스를 실행하기 위한 환경으로서는 성능을 비롯한 여러 단점을 가지고 있습니다.

컨테이너는 하드웨어를 소프트웨어로 재구현하는 가상화(= 가상머신)와는 달리 프로세스의 실행 환경을 격리합니다. 컨테이너가 실행되고 있는 호스트 입장에서 컨테이너는 단순히 프로세스에 불과합니다만, 사용자나 컨테이너 입장에서는 호스트와는 무관하게 동작하는 가상머신처럼 보입니다. 그래서 컨테이너형 가상화라고 부르기도 합니다. 도커는 이러한 컨테이너 형 가상화를 지원하는 도구 중 하나입니다. 도커는 가상머신의 역할을 넘어서 어느 플랫폼에서나 특정한 상태를 그대로 재현가능한 애플리케이션 컨테이너를 관리하는 도구를 목표로 합니다. LXC(리눅스 컨테이너)로부터 파생된 도커 컨테이너는 가상머신과는 근본적으로 다른 접근이라는 점을 짚어둘 필요가 있습니다.

도커는 가상머신과 같이 하드웨어를 가상화하는 것이 아니라, 리눅스 운영체제에서 지원하는 다양한 기능을 사용해 컨테이너(하나의 프로세스)를 실행하기 위한 별도의 환경(파일 시스템)을 준비하고, 리눅스 네임스페이스와 다양한 커널 기능을 조합해 프로세스를 특별하게 실행시켜줍니다. 이는 가상머신과 같이 하드웨어를 가상화하는 것이 아니라, 운영체제 상에서 지원하는 방법을 통해서 하나의 프로세스(컨테이너)를 실행하기 위한 별도의 환경을 구축하는 일을 지원하고, 도커는 바로 프로세스를 격리시켜 실행해주는 도구라고 할 수 있습니다.

가상머신과의 차이를 보기 위해서, 간단한 예를 살펴보겠습니다. 예를 들어 우분투 18.04에서 Ubuntu에서 센트OSCentOS 환경을 구축하는데 시간이 얼마나 걸릴까요? 먼저 우분투 상에서 작업을 하고 있다고 가정해보겠습니다.

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"...

이미 도커가 설치되어있는 환경이라면 명령어 하나로 센트OS 머신을 실행할 수 있습니다.*****

$ docker run -it --rm centos:latest bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
8d30e94188e7: Pull complete
Digest: sha256:2ae0d2c881c7123870114fb9cc7afabd1e31f9888dac8286884f6cf59373ed9b
Status: Downloaded newer image for centos:latest

[root@881189373f8b /]#

docker run -it centos:latest bash 명령어는 centos:latest 이미지로부터 bash를 실행하라는 의미입니다. 아직 이미지가 없다면, 도커의 공식 저장소에서 이 이미지를 풀 받아옵니다.* 그리고 이 이미지를 기반으로 bash 프로세스를 실행합니다. 안정적인 네트워크 환경에서는 센트OS 이미지를 받는 데 채 1분이 걸리지 않습니다. 명령어를 실행하는 시간은 우분투 환경에서 그냥 명령어를 실행하는 것과 차이가 없다고 봐도 무방합니다. 마지막에는 셸 프롬프트가 달라진 것을 볼 수 있습니다.

그럼 지금 실행중인 셸의 환경이 정말 센트OS인지 확인해보도록 하겠습니다.