About Docker

손병진·2021년 1월 26일
0

도커의 배경

  • VMware나 VirtualBox 같은 가상머신은 호스트OS 위에 게스트OS 전체를 가상화하여 사용하는 방식이다. 이러한 방식은 여러 OS를 가상화할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었다.
  • 반면, Docker의 경우 호스트 서버에는 호스트OS만 있으며 그 위에서 컨테이너 엔진은 컨테이너를 격리된 상태로 유지하지만 단일 기본 OS 서비스를 공유할 수 있게 한다.

Docker 기본 실행

  • Dockerfile 생성하여 컨테이너 이미지를 만드는 지침을 삽입한다.
  • docker build -t getting-started
    -t 명령어는 태그를 지정해주는 기능이다.
  • docker run -dp 3000:3000 getting-started
    -d : 분리 모드(백그라운드)에서 컨테이너 실행
    -p number:number : 호스트의 포트 번호를 컨테이너의 포트에 맵핑
    getting-started : 사용할 이미지

업데이트 반영

  • 수정 작업 뒤 docker build -t getting-started
    기존에 실행했던 컨테이너를 제거해야 한다.
  • docker ps
    컨테이너 정보를 보여주며, CONTAINER ID 값을 확인한다.
  • docker stop CONTAINERID
    해당 값을 넣어 중지 시킨다.
  • docker rm CONTAINERID
    컨테이너가 중지되면 위 명령어로 제거할 수 있다.
    위 과정은 Docker 대쉬보드에서 아이콘을 클릭하여 쉽게 처리할 수도 있다.
  • docker run -dp 3000:3000 getting-started
    수정된 컨테이너 실행.

DockerHub

  • 먼저, DockerHub 에 접속하여 레포지토리(getting-started)를 생성한다.
    로컬 이미지를 push 하기 위해서는 태그를 지정해야 한다.
  • docker login -u userName
    계정정보를 활용하여 터미널에서 먼저 로그인한다.
  • docker tag getting-started userName/getting-started
    getting-started 라는 이미지에 userName/getting-started 라는 새로운 태그를 달아준다.
  • docker push userName/getting-started
    DockerHub 레포지토리에 푸쉬해준다.
  • Play_with_docker
    DockerHub 으로 push 된 컨테이너 이미지는 해당 사이트에서 새로운 인스턴스를 추가하여 실행할 수 있다.

DB 시스템

  • docker 시스템은 컨테이너가 실행될 때에 다양한 layer를 사용한다. 그리고 각 컨테이너 파일에는 업데이트를 반영하는 scratch space 공간도 별도로 있다. 그렇기에 동일한 이미지로 두가지의 컨테이너를 실행하더라도 변경사항이 다른 컨테이너에 표시되지 않는다.

DB 유지

  • docker volume create fileName
    볼륨을 생성하여 데이터가 저장된 디렉토리에 연결함으로써 데이터를 유지할 수 있다(mounting).
  • docker run -dp 3000:3000 -v fileName:/etc/todos getting-started
    경로를 지정하여 컨테이너를 실행시켜주면 해당 볼륨의 데이터를 가져온다.
  • docker rm -f CONTAINERID
    해당 컨테이너를 삭제한 뒤에
    docker run -dp 3000:3000 -v fileName:/etc/todos ...
    명령어로 다시 실행하면 이전 데이터가 그대로 반영되어 나온다.
  • docker volume inspect fileName
    해당 명령어를 통해 저장된 데이터를 확인할 수 있다.
    [
      {
          "CreatedAt": "2021-01-26T08:10:59Z",
          "Driver": "local",
          "Labels": {},
          "Mountpoint": "/var/lib/docker/volumes/todo-db/_data", // 디스트상의 실제 위치
          "Name": "todo-db",
          "Options": {},
          "Scope": "local"
      }
    ]

Bind Mount

  • 이름이 지정된 볼륨은 저장되는 위치에 대해 걱정할 필요가 없기 때문에 단순히 데이터를 저장하려는 경우 유용하다.
  • 반면에, 바인드 마운트의 경우
    호스트의 정확한 마운트 지점을 제어합니다. 이를 사용하여 데이터를 유지할 수 있지만 컨테이너에 추가 데이터를 제공하는 데에 자주 사용됩니다. 또한 데이터를 작업하고 마운트하여 변경사항을 즉시 확인할 수 있다.
    docker run -dp 3000:3000 \ -w /app -v "$(pwd):/app" \ node:12-alpine \ sh -c "yarn install && yarn run dev"

profile
https://castie.tistory.com

0개의 댓글