[Docker] Docker로 Ubuntu에 OpenVPN Server 구축하기 #1 Docker 설치

    Purpose

    이 글을 작성하는 시점으로 나의 사내 주 업무는 자사 제품에 대한 웹 기반 원격 모니터링 시스템(RMS; Remote Monitoring System)을 구축하는 것이다.

    해당 업무를 수행하고 밥값을 벌기 위해 해야하는 일들이 인프라 구축에서 부터 웹 개발 및 배포까지 굉장히 많은 Task Chain으로 연결되어 있다.

    이 Task Chain 중 하나가 바로 '현장 곳곳에 설치된 자사 제품의 운전 값을 서버로 읽어들여 DB에 로깅하기' 인데, 이를 구현하려면 여러 가지 전제 조건이 필요하지만 그 중 가장 크리티컬한 요소는 바로 다음이다.

    현장 마다 공급되는 네트워크의 구성이 다를 수 있다.
    (예; 유동 IP 혹은 고정 IP, 무선망 혹은 유선망)

    서버가 데이터를 수집하기 위해서는 네트워크 상으로 목적지인 납품된 장비들에 도달할 수 있어야 한다.

    (물론 반대 방향으로도 마찬가지)

    하지만 각 현장 마다 공급되는 네트워크 구성 상태가 다를 것이고, 특히 고정 IP가 아닌 유동 IP를 공급받는 현장이라면 IP 주소가 매번 변경될 것이다.

     

    이를 극복할 수 있는 방법이 여러 경우의 수가 있을것이다.

    고객에게 제품을 설치하기 위한 현장 구성 사양에 '고정 IP를 부여받은 회선을 공급 가능할 것'이라는 전제 조건을 달아 놓는다면 가장 깔끔하게 해결 되겠지만, 알다시피 고정 IP 회선이 많이 비싸다.

     

    개발자 입장에서 '돈이 들지 않는', '무료 라이선스인'이라는 수식어가 붙는 솔루션을 찾으라고 한다면 당연히 오픈 소스 소프트웨어를 찾게 될 것이고 이를 OpenVPN을 사용해 극복하고자 했다.

    VPN 서버망을 구축하여 각 제품이 클라이언트로서 동작한다면 고정 IP를 부여할 수도 있고 보안은 덤이다.

    (사실 IIOT 필드에서 내세우기에는 '보안'의 요소가 더 그럴싸 하다)

     

    Development Environment

    • Ubuntu Linux 20.04, 18.04 LTS 테스트 완료
    • 공인 및 고정 IP, 혹은 네임 서버에 등록된 도메인이 있는 서버 컴퓨터에서 테스트 완료

     

     

    Docker 설치

    서론이 길었으므로 해당 포스트에서는 우분투에서 Docker를 설치하는 것 까지만 다루도록 하겠다.

    https://docs.docker.com/engine/install/ubuntu/

     

    Install Docker Engine on Ubuntu

     

    docs.docker.com

    '공식 문서(Official Docs)'는 언제나 옳다.

    나에게 필요한 부분만 짚고 넘어가서 전체 내용은 한 번 보길 추천한다.

    Prerequisites

    OS requirements

    Docker Engine을 설치하려면 다음 Ubuntu 버전들 중, 하나의 64-bit 버전이 필요하다.

    • Ubuntu Kinetic 22.10
    • Ubuntu Jammy 22.04 (LTS)
    • Ubuntu Focal 20.04 (LTS) → Tested
    • Ubuntu Bionic 18.04 (LTS)

    Docker Engine은 다음 아키텍쳐와 호환 가능하다.

    • x84_64
    • amd64
    • armhf
    • arm64
    • s390x

    Uninstall old versions

    docker, docker.io, docker-engine 등으로 부르던 이전 버전의 Docker가 설치되어 있는 경우, 이를 삭제해야 한다.

    sudo apt-get remove docker docker-engine docker.io containerd runc

    기존의 이미지, 컨테이너, 볼륨 및 네트워크를 포함한 /var/lib/docker/의 내용들은 그대로 유지된다.

    만약, 기존 데이터를 유지할 필요 없이 클린 설치(clean-install)를 원한다면 여기를 참조한다.

     

    Installation methods

    필요에 따라서 다음과 같은 방법들로 Docker Engine을 설치할 수 있다.

    1. Docker Desktop for Linux를 사용한 설치 방법
      • 애플리케이션으로 설치됨
      • Window나 macOS에서 설치되는 것 처럼 가상화시켜 실행하는 것으로 보임
    2. Docker 저장소(repository)를 사용한 설치 방법 → Tested
      • 공식적으로 recommand되는 방법
      • 대부분의 사용자들이 사용
      • 설치 및 업그레이드 작업의 편의를 위해 Docker 저장소를 사용
    3. 수동(manual) 설치 방법
      • DEB 패키지(.deb)를 통해 수동으로 설치 및 업그레이드 수행
      • 일부 사용자들이 사용
      • 인터넷에 액세스할 수 없는 air-gapped 시스템에 Docker를 설치할 때 유용
    4. 스크립트를 통한 자동 설치 방법
      • 테스트 및 개발 환경에서 사용
      • 편의를 위해 자동화된 스크립트를 사용해 설치

    Install using the repository

    Set up the repository

    1. apt 업데이트 후 HTTPS를 통해 저장소에 접근할 수 있도록 패키지 설치

    sudo apt-get update
    
    sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release

    2. Docker의 공식 GPG 키 추가

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    3. 저장소 설정을 위해 다음 명령어를 입력

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

    Install Docker Engine

    1. apt 패키지 업데이트

    sudo apt-get update

    2. 최신 버전의 Docker Engine, containerd, Docker Compose를 설치

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    (특정 버전의 Docker를 설치하고자 한다면 상단 공식 문서를 참조)

    3. 설치된 Docker Engine을 확인하기 위해 hello-world를 다운로드 받아 컨테이너로 실행

    sudo docker run hello-world

     

     
     
    4. 설치된 Docker 버전 확인
    docker --version

    Add user on docker group

    1. 이전에 실행한 hello-world 이미지를 sudo 권한 없이 실행하면, 다음과 같이 Docker deamon의 소켓에 연결하는 도중에 권한이 없다는 에러가 발생한다.

    unsuk@VirtualBox-Ubuntu18:~$ docker run hello-world
    docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
    See 'docker run --help'.

    이는 Docker를 설치하면서 docker 그룹이 생성 되었으나, 어떠한 유저도 해당 그룹에 추가되지 않았기 때문에 발생한 에러다.

    2. docker 그룹에 현재 유저를 추가한다.

    sudo usermod -aG docker $USER

    3. 재부팅 후 다시 sudo 권한 없이 이미지를 재실행하면 더 이상 에러는 발생하지 않는다.

    [Option] Uninstall Docker

    설치 도중 무언가 잘못  되었을 때 Clean 삭제를 위한 방법임.

    1. Docker Engine, CLI, Containerd, Docker Compose 패키지 삭제

    sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin

    2. 패키지를 삭제했다고 해서 이미지, 컨테이너, 볼륨 및 구성 파일(config files)들이 자동으로 삭제되지 않는다.

    다음 명령어를 실행해 모든 이미지, 컨테이너 및 볼륨을 삭제한다.

    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd

     

     

    일단 Docker 설치 끝.

    OpenVPN 이미지 다운로드 및 사용법은 다음 포스팅에서...

    댓글

    Designed by JB FACTORY