[Infra] Docker 설치

Docker

💡 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈 소스 프로젝트

  • 이미지의 용량이 가상머신에 비해 대폭감소
    • 컨터이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재한다.
  • 애플리케이션의 개발과 배포가 편해진다.
    • 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이기 때문에 컨테이너 자체에 특별한 권한을 주지 않는 한 호스트 OS에 영향을 끼치지 않아 독립된 개발 환경을 보장 받을 수 있다.
  • 여러 애플리케이션의 독립성과 확장성이 높아진다.
    • 여러 모듈에게 독립된 환경을 동시에 제공할 수 있기 때문에 마이크로 서비스 구조에서 가장 많이 사용되고 있는 가상화 기술

Docker 설치

설치 전 필요한 패키지 설치

💡 소프트웨어 저장소를 관리하고 해당 저장소와 안전한 통신을 보장하기 위해 필요한 패키지 설치

sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  • apt-transport-https: 패키지 관리자가 https를 통해 데이터 및 패키지에 접근할 수 있도록 하여 안전한 통신 보장
  • ca-certificates: 인증서 관리를 위한 필수 패키지 ⇒ SSL 인증서의 신뢰성을 확인
    • certificate authority에서 발행되는 디지털 서명.
    • SSL 인증서의 PEM 파일이 포함되어 있어 SSL 기반 앱이 SSL 연결이 되어있는지 확인할 수 있음
    • HTTPS 연결에 사용
  • curl: 특정 웹 사이트에서 데이터를 다운로드 받을 때 사용하는 패키지
  • gnupg-agent: OpenPGP 표준 규격의 데이터 통신을 암호화하고 서명할 수 있는 패키지
  • software-properties-common: PPA를 추가하거나 제거할 때 사용한다.
    • 소프트웨어 소스를 관리하기 위한 일반적인 도구 모음
    • PPA: Personal Package Archive(개인 패키지 저장소)를 의미하며, 캐노니컬社의 우분투에서 기본적으로 제공하는 패키지 외의 사적으로 만든 패키지를 의미한다

Docker에 대한 GPC Key 인증 진행

💡 GPC Key는 Docker 프로젝트에서 사용되는 공개 키로, Docker의 공식 저장소에서 제공하는 이미지 및 소프트웨어를 검증하기 위해 사용

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • -f : 오류발생시 오류 메시지 표시 x
  • -s : 진행정보나 진행률 표시 x
  • -S : 오류가 발생하면 오류메시지 표시
  • -L : 리다이렉트가 발생하면 해당 위치로 이동
  • https://download.docker.com/linux/ubuntu/gpg : Docker 공식 GPG 키를 다운로드 하는 URL
  • apt-key add - : GPG 키를 APT 패키지 관리자에 추가하는 명령어
  • OK가 떴다면 정상적으로 등록이 되었다는 뜻이다

Docker 레포지토리 등록

  • add-apt-repository : 시스템 API 패키지 관리자에 새로운 저장소 추가, Docker Engine 및 관련 도구를 설치, 업그레이드 및 관리
    • AMD64 계열 arch=amd64 - Windows, macOS 및 리눅스와 같은 다양한 운영 체제
    • sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    • ARM64 계열 arch=arm64 - 리눅스 기반 운영체제
    • sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    • deb : APT 저장소가 DEB 패키지 사용
    • https://download.docker.com/linux/ubuntu: Docker 패키지가 호스팅 되는 저장소의 URL
    • $(lsb_release -cs) ****: 현재 Ubuntu 버전의 코드명을 동적으로 가져와 Ubuntu 버전에 맞는 Docker 패키지 다운로드
    • stable : 사용할 docker 버전 지정 - stable(안정적인) 버전

패키지 리스트 갱신

sudo apt-get -y update

Docker 패키지 설치

  • apt-get을 이용하여 Docker를 설치한다
    • docker-ce: Docker Community Edition의 약자
      • Docker 커뮤니티 버전으로, 개발자 및 개인 사용자를 위해 무료 제공
      • Docker Engine을 포함하며, 컨테이너를 생성, 관리하고 실행하는데 사용
    • docker-ce-cli: Docker Community Edition의 CLI 환경에서 추가로 설치해야 하는 패키지
      • Docker Engine과 상호 작용하기 위한 명령 줄 도구
      • 사용자는 Docker CE CLI를 사용하여 컨테이너, 이미지, 네트워크 및 볼륨과 같은 Docker 리소스를 관리 및 제어 가능
      • Docker CE CLI는 Docker 명령어 (docker run, docker build 등)를 제공하여 컨테이너의 생성, 실행, 빌드 및 관리를 수행
    • containerd.io: Docker 컨테이너 런타임, 컨테이너의 생명주기 관리 및 실행을 담당
sudo apt-get -y install docker-ce docker-ce-cli containerd.io

Docker 일반 유저에게 권한 부여

  • Docker는 항상 root로 실행되기 때문에 sudo를 사용하여 명령어를 입력해야 한다
  • 사용자를 docker 그룹에 추가하여 sudo를 사용하지 않아도 docker 명령어를 사용할 수 있도록 한다
    sudo chmod 666 /var/run/docker.sock
  • sudo usermod -aG docker ubuntu
  • Docker 서비스 재시작
    • 이후, 사용자 세션 로그아웃 및 재로그인 필요
sudo service docker restart exit
  • Docker image 정리
docker image prune -a -f

Docker Compose

💡 단일 서버에서 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구

  • 여러 개의 컨테이너가 한 애플리케이션으로 동작할 때, 테스트하기 위해 컨테이너를 하나 씩 생성해야 한다
  • 여러개의 컨테이너로 구성된 애플리케이션을 구축하기 위해 run 명령어를 여러 번 사용해도 되지만, 번거롭다
  • Docker Compose를 이용하면 *.yaml 파일을 이용하여 여러 개의 컨테이너 실행을 한 번에 관리하여 하나의 프로젝트처럼 다룰 수 있는 환경을 제공한다

Docker Compose 다운로드

  • curl 명령을 이용하여 docker-compose 패키지를 /usr/local/bin/docker-compose 디렉토리에 다운로드 한다
sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

/usr/local/bin/docker-compose 권한 변경

  • chmod를 이용하여 /usr/local/bin/docker-compose 디렉토리에 대해 모든 사용자에게 실행 권한을 추가시킨다
sudo chmod +x /usr/local/bin/docker-compose

 

'Infra' 카테고리의 다른 글

[Infra] Nginx 설정  (0) 2024.05.25
[Infra] Docker-Compose 를 통한 DB 구축  (0) 2024.05.25
[Infra] Jenkins - GitLab 연동  (0) 2024.05.25
[Infra] Jenkins 설치  (0) 2024.05.25
[Infra] Ubuntu 서버 세팅  (0) 2024.05.25