[카테고리:] Docker

  • Docker 자동 설치를 위한 Shell Script 사용법

    Docker 자동 설치를 위한 Shell Script 사용법

    docker에서 제공하는 shellscript로 docker engine 설치

    # docker 에서 제공하는 shell script를 이용한 자동 설치.
    
    curl -fsSL https://get.docker.com -o get-docker.sh
    # shell script 내용 확인 후 변경 가능.
    sudo vi get-docker.sh
    # 실행 권한 부여
    chmod +x get-docker.sh
    # 설치.
    sudo sh get-docker.sh

    만약 Docker가 설치가 안된다면..

    Base.repo를 바꿔보자

    [base]
    name=CentOS-$releasever - Base
    baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever - Updates
    baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever - Extras
    baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever - Plus
    baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    [contrib]
    name=CentOS-$releasever - Contrib
    baseurl=http://vault.centos.org/7.9.2009/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 컨테이너와 VM 가상화 이해하기

    컨테이너와 VM 가상화 이해하기

    가상화(virtualization)

    – 일반적으로 서버 스토리지, 네트워크, 애플리케이션 등을 가상화 하여 하드웨어 리소스를 효율적으로 사용하는데 그 목적이 있고, 이를 통해 기업은 효율적인 자원 활용, 자동화된 IT 관리, 빠른 재해 복구 등의 장점을 갖을 수 있음.

    – 물리적 하드웨어 유지 관리 대신 소프트웨어적으로 추상화된 가상화를 통해 제한된 부분을 쉽게 관리하고 유지할 수 있음.

    – 하이퍼바이저 기반의 가상머신(VM, Virtual Machine)

    컨테이너 가상화 vs VM 가상화

    – 두가지 가상화 모두 실행하고자 하는 애플리케이션 프로세스 및 종속 요소와 소스 등을 패키지, 즉 이미지화 하여 HostOS와 격리된 환경을 제공.

    – 다만, VM 가상화는 실제 호스트 운영체제와 같이 별도의 GuestOS를 두고 원하는 애플리케이션을 설치하는 **하드웨어 수준의 가상화 구현.**

    – 컨테이너 가상화는 VM 가상화에 비해 경량이면서 호스트 운영체제의 커널을 공유하는 운영체제(OS)수준의 가상화 구현.

    – 따라서, 컨테이너 가상화는 원하는 애플리케이션 환경을 빠르게 번들링하여 패키지함.

    애플리케이션 배포 방식 비교

    컨테이너화 기술

    – 리눅스 컨테이너 기술은 LXC(Linux Container)를 이용한 시스템 컨테이너화로 시작
    – OS 수준의 가상화 도구.
    – cgroup, namespace 등의 커널 기술을 공유하여 컨테이너에 제공

    – 이후 애플리케이션 컨테이너 기반의 Docker 출시가 되었고, 초기 Docker 버전은 LXC를 활용해 컨테이너를 생성.

    – 지속된 컨테이너 엔진의 발전으로 Docker는 containerd, runC 를 이용하는 방식으로 변경.
    – 커널 기술의 공유를 통해 컨테이너 생성을 지원하는 runC
    – 생성된 컨테이너의 라이프사이클 관리를 지원하는 containerd
    – 사용자 환경에서의 명령을 전달하는 dockerd

    Dockerd 기능

  • Docker와 컨테이너의 중요성: 빠르고 경량화된 배포

    Docker와 컨테이너의 중요성: 빠르고 경량화된 배포

    컨테이너 기술

    • 컨테이너는 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를(소스 코드, 구성 요소, 종속성 등) 하나의 런타임 환경으로 패키징한 논리적 공간.
    • 이러한 패키징 기술을 Docker에서는 Dockerfile build를 통해 구현

    애플리케이션과 종목 항목을 하나로 묶어, 실행하게 해주는 운영 시스템을 가상화한 경량의 격리된 프로세스라고 볼 수 있음

    • mircoVM 이라고도 함.
    • 운영체제 수준의 가상화 제공.
    • 독립성을 갖기 때문에 다른 컨테이너에 영향을 주는 않는 statless 환경 제공.(VM과 같음)

    컨테이너 기술이란

    • 이 기술은 개인 데스크탑 뿐 아니라 기업 내의 온프레미스 서버에서 AWS와 같은 퍼블릭 클라우드까지 언제 어디서든 빠르고 효율적으로 배포 가능. 확장성 또한 가지고 있음.
    • 이를 통해 서버구성, OS 설치, 네트워크, 개발 도구 구성 등의 반복적이고 불편한 작업에 시간을 낭비하지 않고 개발자는 애플리케이션 개발 그 자체에 집중할 수 있음.

    컨테이너의 특징

    • 컨테이너는 우리가 개발한 최소한의 image를 통해 실행되므로 경량.
      – 컨테이너 이미지 생성의 Best pratice 중 하나는 이미지 경량화 다.
    • 일반 서버 환경에서의 애플리케이션 실행과 달리 언제든 프로세스 수준의 속도로 빠르게 실행(run) 할 수 있고, 한번에 여러 개의 컨테이너를 동시에 실행 가능.
      – Docker에서는 Docker compose 기술을 통해 구현.
    • 개인 환경이던 클라우드 환경이던 어떤 OS, 어떤 환경에서도 동작 가능한 이식성을 보유하고 있음.
    • 컨테이너 자체 애플리케이션 환경에 대한 관리만 요구되므로, 지속적 서버관리 비용을 절감 할 수 있음.
    • 개발팀과 운영팀의 업무 분리로 각자의 업무와 세븐화된 관리에 집중할 수 있음. 즉, 컨테이너는 DevOps workflow 구성에 최적. ===> CI/CD 업무

    컨테이너는 어떤 타입으로 생성

    • 컨테이너 패키징 메커니즘 시스템 / 애플리케이션 / 라우터 컨테이너
    • 시스템(or OS) 컨테이너
      – 호스트 OS 위에 Ubuntu와 같은 배포판 리눅스 image를 통해 배포되는 컨테이너.
    • 또다른 VM의 형태이고, 내부에 다양한 애플리케이션 및 라이브러리 도구를 설치, 실행 가능.
    • 대표적으로 LXC, LXD, OpenVZ, Linux VServer, BSD jails 등이 있음.
    • 애플리케이션 컨테이너(Docker의 주역할.)
      – 단일 애플리케이션 실행을 위해 해당 서비스를 패키징하고 실행하도록 설계된 컨테이너.
    • 3-tier 애플리케이션과 같은 경우 각 tier (frontend-backend-DB)를 개별 컨테이너로 실행하여 연결.
    • 대표적으로 Docker container runtime, Rocket 등이 있음

    Docker는 무엇

    • 여러 계층의 Application을 container로 분리, 연결하여 실행하는 **MSA(MicroService Architecture) 프로젝트에 유용함
    • Application의 Infra(runtime)는 Image를 통해 제공하고 Public or Private 하게 공유 가능
    • Github와 유사한 방식(open share)으로 Docker hub에서 제공 함.
    • 이렇게 제공된 image를 기반으로 Application 서비스를 제공, 이를 통해 컨테이너화(containerization) 할 수 있음

  • Docker로 CentOS7 환경 구축하기

    Docker로 CentOS7 환경 구축하기

    Docker 셋팅

    Docker Desktop 설치

    Docker centOS7 image 다운

    • docker hub 에서 다운로드 받으면 됨

    해당 이미지를 이용해서 docker container 제작해 centOS7 환경 구축

    docker run --privileged -it -d --name centos_test --hostname centos_test centos:7.9.2009 /usr/sbin/init

    -ddetached mode 흔히 말하는 백그라운드 모드-p호스트와 컨테이너의 포트를 연결 (포워딩)-v호스트와 컨테이너의 디렉토리를 연결 (마운트)-e컨테이너 내에서 사용할 환경변수 설정–name컨테이너 이름 설정–rm프로세스 종료시 컨테이너 자동 제거-it터미널 입력을 위한 옵션–link컨테이너 연결 [컨테이너명:별칭]

    docker 실행

    docker exec -it centos_test /bin/bash

    yum 안될 때

    yum command를 찾지 못할 때..

    yum update

    net-tools, vim, wget 설치

    yum install net-tools vim wget

    npm, nodejs 설치되지만, 버전이 맞지 않아 pm2를 설치 오류가 생김

    해결법

    nvm(node Version Manager)를 설치

    먼저 wget을 설치해주어야 함

    yum install wget
    
    ---
    # nvm 다운로드 및 설치.
    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
    # 설치가 완료되면 .bashrc 파일에 아래 설정이 추가 되어짐.
    # .bashrc export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" 
    # This loads nvm bash_completion
    # nvm 설정 적용.
    source ~/.bashrc
    # nvm 설치 버전 확인.
    nvm --version
    
    ---
    
    nvm use systemnode -v
    npm uninstall -g a_module

    기본 사용법

    nvm list 
    #or 
    nvm ls
    • 특정 버전 사용
    nvm use <version> 
    # ex) nvm use 16.17.0
    • 버전 추가 및 삭제
    # 버전 추가 
    nvm install <version> 
    # ex) nvm install 16.17.0 
    # 16.x.x 의 마지막 버전 추가 
    nvm install <major version> 
    # ex) nvm install 16 
    # 버전 삭제 
    nvm uninstall <version> 
    # ex) nvm uninstall 16.17.0
    • 기본 버전 설정
    nvm alias default <version> 
    # ex) nvm alias default 16.17.0

    node.js 설치

    nvm 저장소에 지원하는 node 버전을 확인해 봄

    # 지원하는 node 버전 확인. 
    nvm ls-remote
    
    # LTS 버전으로 설치.
    nvm install --lts
    
    # 정상적으로 설치 되어졌는지 확인.
    node -v 
    npm -v

    pm2 설치

    npm install pm2 -g
    • -g : global 설치

    AWS EC2 서버 접속

    해당 container에 키파일 저장
    키파일이 있는 폴더에 디렉토리를 변경해준다

    pm2-logrotate 설치

    pm2 install pm2-logrotate