16주차 도커 Docker

lim1313·2021년 11월 2일
0

부트캠프 TIL

목록 보기
47/49

Docker

도커 설치

Ubuntu 유저용 Docker Engine 설치 안내
Docker Compose


왜 Docker?

도키 핵심 키워드

컨테이너

이미지를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징, 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술.
애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자.

이미지

도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image라고 한다. 특정 프로세스를 실행하기 위한(컨테이너 생성(실행)에 필요한) 모든 파일과 설정값을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 설치 할 필요없는 파일을 의미한다.

레지스트리

이미지는 레지스트리에 저장된다. 대표적인 이미지 레지스트리로는 Docker Hub, Amazon ECR이 있다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 된다

컨테이너 방식의 장점

  • 의존성 충돌 문제를 해결해 준다
  • 개발과 배포 환경을 일치시킨다
  • 수평 확장을 쉽게 해준다
  • 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다

컨테이너

컨테이너 기술을 바탕으로 한 컴퓨터 안에 여러 대의 컨테이너가 존재하고, 이를 통해 애플리케이션 실행 환경이 격리되어 있다.

하나의 컴퓨터 내에 서로 다른 버전의 php가 설치될 수 있는 것은, 컨테이너 하나하나가 애플리케이션 실행과 관련해서 높은 수준의 격리를 제공하기 때문이다.

컨테디너에서 독립적으로 소유하는 자원들

  • 프로세스
    특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있다.
    컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.
  • 네트워크
    기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있다.
  • 파일 시스템
    컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

컨테이너 기술의 가장 큰 장점은 실행 환경의 일치이다. 더 많은 트래픽으로 인한 서버 증설에 컨테이너 기술은 아주 활발하게 이용되고 있다. 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 된다. (심지어 AWS는 서버를 만들고 삭제하는 일을 자동으로 해준다!)

이러한 기술을 응용하여, 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능하다. 이를 통해 새 버전의 애플리케이션에서 발생할 수 있는 문제들을 미리 확인하고, 이러한 문제가 사용자 전체에게 영향을 끼치지 않도록 만들 수도 있다.


Docker CLI

httpd를 레지스트리로부터 다운로드
docker pull httpd

다운로드된 이미지 목록 확인
dockr images

현재 가동중인 컨테이너 목록 확인
docker ps

생성된 컨테이너 목록 모든 확인
docker ps -a

httpd 기반으로 httpdserver라는 컨테이너 생성
docker run --name httpdserver httpd

컨테이너를 백그라운드에서 실행하게 해주는 -d 옵션
-d
ex) docker run --name 컨테이너_이름 -d -p 3000:80 sebcontents/part1

docker-compose

docker compose는 여러 개의 docker를 정의하고 실행하는 툴이다. 그래서 YAML(YML) 파일로 여러 개의 docker 내부 속성을 설정하고 한 번에 실행시킨다. 마치 docker를 배치로 한 번에 실행시키는 것과 같다.

도커 명령어를 파일로 관리해서 복잡한 도커 컨테이너 및 도커 네트워크를 구성하기에 용이하다

하나의 docker-compose에서 관리되는 컨테이너끼리는 동일한 docker network에서 구동된다.

version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  node:
    image: sebcontents/server
    restart: 'always'
    ports:
      - "5000:3000"
    container_name: server

실행순서

  1. yaml, yml 파일을 생성한다.
  2. yaml, yml 파일 안에 위의 소스를 작성한다.
  3. yaml 파일이 있는 위치에서 docker-compose up -d 명령어를 통해 yaml 파일을 실행한다.
  4. 브라우저에서 localhost:8080 혹은 127.0.0.1:8080 에서 실행된 client 화면을 확인한다.
profile
start coding

0개의 댓글