TIL-220107

EBinY·2022년 1월 7일
0

TIL - Today I Learned

목록 보기
45/54

Docker

  • 컨테이너
    • 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자
  • 이미지
    • 실행되는 모든 컨테이너는 이미지로부터 생성됨
    • 애플리케이션 및 구성을 함께 담아놓은 템플릿
    • 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있음, 수평 확장이 가능
    • 기본 이미지(base image)에 변경 사항을 추가/커밋하여 다른 버전의 이미지를 만들 수도 있음
  • 레지스트리
    • 이미지는 레지스트리에 저장됨, Docker Hub, Amazon ECR가 대표적
    • 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 없다면 기본 레지스트리로부터 다운로드 받게 됨

컨테이너 방식의 장점

  • 의존성 충돌 문제를 해결해준다
    • 프로그램A 실행에 프로그램B가 반드시 필요한 경우, A는 B에 의존 관계를 가진다
    • 프로그램A 실행에 프로그램B의 특정버전에서만 제대로 작동, 의존성이 충돌한다
    • 컨테이너 내에 애플리케이션을 구성, 실행 환경이 격리되어 각자 고유의 의존성을 가짐
    • 컨테이너의 격리 환경과 개별 자원
      • 프로세스
        • 특정 컨테이너의 프로세스는 그 컨테이너안에서만 엑세스 가능
        • 컨테이너 안의 프로세스는 다른 컨테이너에 영향을 줄 수 없음
      • 네트워크
        • 기본적으로 컨테이너 하나에 하나의 IP 주소가 할당됨
      • 파일 시스템
        • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있음
        • 해당 컨테이너의 명령이나 파일 등의 엑세스를 제한할 수 있음
    • 컨테이너가 공유하는 자원
      • CPU 성능, 메모리, 리눅스 커널(linux OS 기반으로 작동함)
    • 도커를 비롯한 리눅스 컨테이너 기술은 VM(Virtual Machine, 가상머신)의 접근 방법과는 다름
      • 가상 머신과 비슷한 수준의 격리성을 제공한다
  • 개발과 배포 환경을 일치시킨다
    • 개발팀에서의 개발 환경을 맞추기가 어려움, 운영체제, 런타임 환경, 배포판에 따른 애플리케이션 등
      • OS별 설치 방법, 설치 과정 등 초기 환경을 맞추는데 많은 시간이 소요됨
    • OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있음
    • 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경하에 개발을 진행할 수 있음
    • 배포도 마찬가지, 서버에 파일 하나하나를 업로드하는게 아닌, 컨테이너에 담긴 애플리케이션을 실행하는 방식으로 서비스를 제공함
    • AWS EC2에 도커를 설치하거나, ECS를 이용하여 애플리케이션을 도커 컨테이너째로 배포할 수 있게 해줌
  • 수평 확장을 쉽게 해준다, 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
    • 아래 내용은 웹 서비스의 인프라스트럭처에 대한 이해가 필요함
    • 트래픽 분산을 위한 리버스 프록시(그의 한 종류인 로드 밸런서라고도 함)
    • 동일한 서비스를 제공하는 여러 서버에 분산 접속을 돕는다
    • 서버 증설은 동일한 애플리케이션 구성(이미지)을 새로운 서버에 적용하고, 로드 밸런서에 추가만 해주면 됨
    • 새로운 버전의 애플리케이션을 일부 서버에서만 운영하여 테스트를 진행하는 것도 컨테이너 기술로 가능

Docker CLI

docs.docker.com
hub.docker.com

  • Docker CLI 실습 명령어

    • docker image pull
    • docker image ls
    • docker container run
    • docker container ls
    • docker container rm
    • docker image rm(=rmi)
    • docker container run --name 컨테이너_이름 --rm docker/whalesay cowsay boo
    • docker container run -it --rm danielkraic/asciiquarium:latest
      • -it: -i + -t를 동시 사용한 옵션, 사용자와 컨테이너 간 인터렉션(interaction)이 필요한 경우 사용
  • Docker 컨테이너에 파일 복사하기

    • 웹 서버는 도커 컨테이너로 실행, 웹 서버 구성 파일은 직접 만들거나 가져온 파일 구성
      • 장점: 서버에 문제가 생기는 것을 호스트와 별개로 파악 가능
      • 장점: 문제가 생긴 서버를 끄고, 마치 공장 초기화 하듯 도커 이미지로 서버를 재구동 할 수 있음
    • 로컬의 파일과 도커 이미지를 연결하는 방법 2가지, CP, Docker Volume 기능
      • CP(Copy): 호스트와 컨테이너 사이에 파일을 복사(Copy)
      • Volume: 호스트와 컨테이너 사이에 공간을 마운트(Mount)
      • 마운트: 저장공간을 다른 장치에서 접근할 수 있도록 경로를 허용해서, 마치 하나의 저장공간을 이용하는 것처럼 보이게 하는 작업
    • git clone https://github.com/codestates/pacman-canvas
    • docker container run --name 컨테이너_이름 -p 818:80 httpd
      • -p: 로컬호스트의 포트와 컨테이너의 포트를 연결, 818이 로컬, 80이 컨테이너
      • -d: 백그라운드에서 실행할수 있도록 해주는 명령어
    • docker container cp ./ 컨테이너_이름:/usr/local/apache2/htdocs/
      • 현재 폴더의 파일을 뒤 경로에 복사한다
    • docker exec -it 컨테이너_이름 bash : 컨테이너 내부 터미널로 접속
  • Docker 이미지 만들기

    • 이전에 작성한 컨테이너를 이미지로 변환
      • 이전에 작업했던 내용을 다시 한 번 수행하지 않아도 됨(파일 복사 등)
      • 배포 및 관리가 유용
    • 구동한 Docker Container를 이미지로 만드는 방법
      • docker container commit 컨테이너이름 이미지이름:태그_내용
      • docker run --name my_web2 -p 900:80 my_pacman:1.0
        • 이미지가 잘 작동하는지 확인
  • Docker Image 빌드를 위한 파일인 Dockerfile로 만드는 방법

    • Dockerfile 공식 문서
      • Dockerfile을 만들고, Dockerfile 대로 이미지를 build하는 방법
    • Dockerfile은 이미지 파일의 설명서

0개의 댓글