Section10 : Docker & 컨테이너 - 요약

tein·2022년 8월 18일
0

도커 & 쿠버네티스

목록 보기
11/14

컨테이너

  • 코드와 그 코드를 실행하는데 필요한 환경을 포함하는 격리된 박스
  • 모든 컨테이너는 일반적으로 하나의 task에 집중
  • 하나의 컨테이너에서 여러 일을 하지 않는다.
  • 컨테이너에 고정된 재현 가능한 환경을 갖게 된다.
  • 컨테이너가 종료될 때마다 데이터는 손실된다.
  • 하지만 볼륨을 사용하면 데이터를 보존할 수 있다.
    • 볼륨을 사용하여 컨테이너의 특정 폴더를 로컬 호스터 머신의 폴더로 미러링하거나 복사할 수 있다.
    • 따라서 컨테이너가 종료되더라도 그 볼륨의 데이터는 유지된다.
  • 컨테이너는 이미지 위의 얇은 부가 레이어

이미지

  • 이미지는 Dockerfile로 만들거나, Docker Hub에서 가져온다.
    • 가져온 이미지는 다른 사람이 Dockerfile로 만든 것
    • Dockerfile에 설명된 대로 코드와 환경이 포함되어 있다.
  • 하나의 동일 이미지에서 다중 컨테이너를 실행할 수 있다.
  • 이미지는 공유 가능하다
  • 이미지를 기반으로 다중 컨테이너를 만들 수 있다.
  • 읽기 전용이므로 이미지 자체는 실행되지 않으며, 이미지 내부에 코드를 작성하지도 않는다.
  • 이미지를 기반으로 컨테이너 실행
  • 컨테이너가 데이터를 생성하는 경우 데이터는 이미지 위의 얇은 레이어에 있는 컨테이너의 읽기/쓰기 파일 시스템에 기록된다.
  • 이미지는 절대 변경되지 않으며, 쉽게 빌드 된다.
  • 이미지와 컨테이너는 함께 작동한다.

주요 명령어

docker build

  • Dockerfile을 기반으로 이미지 빌드
  • 빌드 컨텍스트 지정하여 Dockerfile이 포함된 폴더와 이미지가 빌드되어야하는 폴더 경로 지정
  • 이미지에 이름과 태그 지정하여 식별하고 유니크하게 만드는데 사용
  • 태그 사용하여 이미지를 버전화할 수 있다.
  • 하나의 이미지 카테고리를 가질 수 있으며 카테고리에서 동일한 이미지의 다른 하위 버전을 가질 수 있다.

docker run

  • 이미지를 컨테이너로 실행할 수 있다.
  • --name 사용하여 컨테이너에 이름 지정
  • --rm 으로 중지 되면 자동으로 제거 가능
  • -d 사용하여 detached 모드에서 실행 가능

컨테이너를 실행 할 때 컨테이너의 기반이 되어야 하는 이미지의 이름과 태그도 제공해야 한다.
-> 컨테이너는 항상 이미지를 기반으로 해야하기 때문

docker push & docker pull

  • DockerHub의 리포지토리에 이미지 공유
  • 이미지 이름은 DockerHub의 리포지토리 이름이어야 한다.
    • DockerHub 사용한다면 이미지 이름은 '계정 이름/이미지 이름'
    • 로컬 머신에서 로컬로 이미지에 레이블을 지정해야한다.
  • DockerHub가 아닌 다른 저장소를 사용할 수도 있다.
    • 이미지 이름은 다른 레지스트리의 그 저장소에 대한 전체 URL이 된다.

데이터, 볼륨, 네트워킹

  • 컨테이너가 제거될 때마다 데이터는 손실된다.
  • 바인드 마운트와 볼륨을 사용하여 이문제를 해결할 수 있다.

바인드 마운트

  • 호스트 시스템의 파일 또는 디렉토리가 컨테이너에 마운트 되며, 파일 또는 데릭토리는 호스트 시스템의 전체 경로로 참조된다.
  • 성능이 우수하지만 특정 디렉토리 구조를 사용할 수 있는 호스트의 파일 시스템에 의존한다.
  • -v /local/path:/container/path
  • 실제로 실행중인 컨테이너로 변경된 소스 코드 또는 일부 구성을 수시로 미러링 하기 위한 로컬 개발용 도구이다.

볼륨

  • 컨테이너 폴더가 로컬 시스템의 폴더로 미러링 되지만, 그 폴더가 있는 위치는 알지 못한다.
  • 컨테이너에서 생성된 데이터가 유지되고, 이전 컨테이너가 제거된 후 새 컨테이너를 실행하면 다시 사용할 수 있게 된다.
  • -v NAME:/container/path
  • 명명된 볼륨과 익명 볼륨이 있다.
    • 데이터를 유지하려면 명명된 볼륨으로 작업한다.
    • 익명 볼륨은 컨테이너의 설정에 의해 오버라이트 되어지는 데이터를 저장하는데 유용하다.

네트워크

  • 컨테이너는 디폴트로 격리되어 있다.
  • 서로 연결되어 요청을 보낼 수 있고 외부 세계에도 요청을 보낼 수 있다.
    • 컨테이너의 IP 주소를 조회하고 다른 컨테이너와 통신하기 위해 그 IP 주소를 이용한다.
      • IP가 변경될 수 있다는 단점이 있다.
    • Docker 네트워크를 만들어 서로 통신하려는 모든 컨테이너를 동일한 네트워크에 추가한다.
      그리고 컨테이너 이름을 주소로 사용하면 도커가 관련 컨테이너의 IP 주소를 자동으로 해결한다.

Docker Compose

  • 도커를 사용하면 컨테이너를 실행하고 이미지를 빌드할 수 있다
  • 하지만 여러 환경 변수, 볼륨, 네트워크가 있는 경우 명령어가 길어지게 된다.
  • Docker Compose를 사용하면 컨테이너 시작 구성을 구성 파일에 넣을 수 있다.
  • $] docker-compose up을 실행할 때 자동으로 선택되어 전송되고,
  • 구성 파일에 정의된 모든 컨테이너를 시작하고 초기화한다.
  • $] docker-composed down으로 중지할 수 있다.
  • Docker Compose는 더 복잡한 컨테이너와 더 복잡한 프로젝트, 특히 다중 컨테이너 프로젝트를 위한 도구이다.
profile
내 시행착오 모음집

0개의 댓글