구축 & 운영/Docker

[Ubuntu] - Docker 설치 방법

단칸이 2022. 3. 27. 16:51

도커의 기본 개념

도커는 리눅스의 응용 프로그램을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트 입니다.

도커는 응용 프로그램과 그 의존성을 컨테이너라는 표준화된 유닛으로 패키징하며, 여기에는 라이브러리/시스템 도구/코드/런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. 그리고 이 컨테이너는 어떠한 리눅스 서버에서도 구동이 가능하다는 특징이 있어, MSA를 지향하는 현재 운영 환경과 맞물려 많은 서버에서 이용되고 있습니다.

흔히 가상머신과의 비교를 많이 하는데, 가상머신은 서버 하드웨어를 가상화하는 반면 컨테이너는 서버의 운영체제를 가상화 한다는 것에 차이점이 있습니다. 도커는 리눅스 커널이 제공하는 기능들 위에 빌드되며, 컨테이너를 위한 운영체제(또는 런타임) 자체가 됩니다.

도커는 커널의 기능에 의존하기 때문에 호스트의 리소스를 공유하여 사용하지만, 자신만의 프로세스 ID 공간, 파일 시스템 구조, 네트워크 인터페이스를 갖고서 운영체제로부터 응용 프로그램을 격리(‘개인화’)하게 됩니다.


도커 설치

도커는 리포지토리를 통해 설치하는 방법, DEB 패키지를 직접 다운로드하여 수동으로 설치하는 방법이 있습니다. 일반적으로는 리포지토리를 이용한 설치를 권장하며, 수동 설치는 인터넷을 사용할 수 없는 환경에서 유용할 수 있습니다.

본문에서는 도커의 공식 가이드라인을 따라 리포지토리를 이용한 설치를 진행합니다.

# apt 패키지 관리자 업데이트
sudo apt-get update

# apt가 HTTPS를 통해 리포지토리를 사용할 수 있도록 패키지 설치
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

도커의 공식 GPG 키를 추가합니다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# curl 설치가 필요한 경우
sudo apt install curl

도커의 stable 버전 저장소를 설정합니다. (필요에 따라 nightly 또는 test 저장소를 추가할 수도 있습니다.)

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt 패키지 관리자를 업데이트하고 최신 버전의 도커 엔진을 설치합니다.

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

‘hello-world’ 이미지를 실행하여 도커가 정상적으로 설치되었는지 확인할 수 있습니다.

sudo docker run hello-world

도커가 부팅 시 자동으로 시작하도록 구성합니다.

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

sudo 명령어 없이 도커 실행 방법

도커를 실행하려면 root 권한이 필요한데, 이는 도커 데몬이 TCP 포트가 아닌 유닉스 소켓에 바인딩 되기 때문입니다. (유닉스 소켓은 기본적으로 root가 소유하며, 다른 사용자는 sudo 명령을 통해 접근할 수 있습니다.)

도커를 매번 sudo 명령어로 시작하지 않으려면 ‘docker’ 그룹을 만들고 여기에 사용자를 추가하면 됩니다. (도커 데몬이 시작되면 ‘docker’ 그룹의 구성원이 액세스할 수 있는 유닉스 소켓이 생성된다.)

# docker 그룹 생성
sudo groupadd docker

# 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER

# 로그아웃 후 다시 로그인, 그룹에 대한 변경 적용
newgrp docker

# docker 실행 테스트
docker run hello-world

sudo 명령어 없이 도커 실행 시 주의점

도커로 컨테이너를 실행한다는 것은 도커 데몬을 실행하는 것을 의미합니다. 그리고 ‘root-less’ 모드를 선택하지 않는 한 반드시 root 권한이 필요합니다.
 
기본적으로는 신뢰할 수 있는 사용자만 도커 데몬을 제어할 수 있어야 합니다. 도커를 사용하면 호스트와 게스트 컨테이너 간에 디렉터리를 공유할 수 있는데, 컨테이너는 제한 없이 호스트의 파일 시스템을 변경할 수 있기 때문입니다. (예를 들어 웹 서버의 REST API를 이용하여 Docker에 임의의 컨테이너를 생성하는 악의적인 파라미터를 전달할 수 있습니다.)
 
이러한 문제를 방지하기 위해 도커 v0.5.2부터 TCP 소켓 대신 유닉스 소켓을 사용하도록 변경되었는데, REST API 엔드포인트에 대한 액세스를 제한하는 방화벽이 있더라도, 컨테이너에서 엔드포인트에 계속 액세스할 수 있기 때문에 권한을 취득할 수 는 있습니다. 따라서 HTTPS 및 인증서를 이용하여 API 엔드포인트를 보호하는 등의 보안 설정을 권장합니다.

'구축 & 운영 > Docker' 카테고리의 다른 글

쿠버네티스의 도커 지원 중단 및 대응 방안  (0) 2022.04.24